Конфигурация поддоменов nginx - PullRequest
75 голосов
/ 28 марта 2012

У меня nginx действует как обратный прокси для apache.Теперь мне нужно добавить новый поддомен, который будет обслуживать файлы из другого каталога, но в то же время я хочу, чтобы все директивы location и proxy_pass, которые у меня были для хоста по умолчанию, также применялись к поддомену.что если я скопирую правила с хоста по умолчанию на новый поддомен, он будет работать, но есть ли способ, чтобы поддомен унаследовал правила?Ниже приведен пример конфигурации

server {
    listen       80;
    server_name  www.somesite.com;
    access_log  logs/access.log;
    error_log  logs/error.log error;


   location /mvc {
      proxy_pass  http://localhost:8080/mvc;
   }


   location /assets {
      alias   /var/www/html/assets;
      expires     max;
   }

   ... a lot more locations
}

server {
    listen       80;
    server_name  subdomain.somesite.com;

    location / {
                root   /var/www/some_dir;
                index  index.html index.htm;
        }
}

Спасибо

Ответы [ 2 ]

88 голосов
/ 28 марта 2012

Вы можете переместить общие части в другой файл конфигурации и include из обоих контекстов сервера.Это должно работать:

server {
  listen 80;
  server_name server1.example;
  ...
  include /etc/nginx/include.d/your-common-stuff.conf;
}

server {
  listen 80;
  server_name another-one.example;
  ...
  include /etc/nginx/include.d/your-common-stuff.conf;
}

Редактировать: Вот пример, который фактически скопирован с моего работающего сервера.Я настраиваю свои основные настройки сервера в /etc/nginx/sites-enabled (обычные вещи для nginx в Ubuntu / Debian).Например, файл конфигурации моего основного сервера bunkus.org - /etc/nginx/sites-enabled, и он выглядит следующим образом:

server {
  listen   80 default_server;
  listen   [2a01:4f8:120:3105::101:1]:80 default_server;

  include /etc/nginx/include.d/all-common;
  include /etc/nginx/include.d/bunkus.org-common;
  include /etc/nginx/include.d/bunkus.org-80;
}

server {
  listen   443 default_server;
  listen   [2a01:4f8:120:3105::101:1]:443 default_server;

  include /etc/nginx/include.d/all-common;
  include /etc/nginx/include.d/ssl-common;
  include /etc/nginx/include.d/bunkus.org-common;
  include /etc/nginx/include.d/bunkus.org-443;
}

В качестве примера вот файл /etc/nginx/include.d/all-common, включенный в оба server контекста:

index index.html index.htm index.php .dirindex.php;
try_files $uri $uri/ =404;

location ~ /\.ht {
  deny all;
}

location = /favicon.ico {
  log_not_found off;
  access_log off;
}

location ~ /(README|ChangeLog)$ {
  types { }
  default_type text/plain;
}
0 голосов
/ 08 февраля 2019

Другим типом решения было бы автоматическое создание файлов конфигурации nginx через шаблоны Jinja2 из ansible . Преимущество этого - простота развертывания в облачной среде и простота репликации на нескольких компьютерах разработчика

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...