Nginx子域配置


78

我让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;
        }
}

谢谢

Answers:


92

您可以将公共部分移动到另一个配置文件中,也可以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(Ubuntu / Debian上的nginx的常规内容)中配置了我的基本服务器设置。例如,我的主服务器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;
}

1
好主意。我需要换由另一指示,为我做了什么,你的建议和nginx的抱怨,当我重新启动他的nginx:EMERG]“位置”指令,在这里不允许使用
托马斯

我的几乎所有nginx配置都包含类似包含的子配置文件。是的,它确实有效。也许您可以使用include指令发布实际配置-以及所包含文件的内容。适当编辑您的原始问题。
莫里茨·邦库斯

我已经更新了答案,以包含实际的工作服务器配置文件。
莫里茨·邦库斯

3
工作正常。我的错。我将此公用文件放在自动加载每个.conf文件的目录中,这导致了错误。非常感谢
Thomas

3
是的,我自己遇到了这个问题。这就是为什么我选择将所有包含的文件放到/etc/nginx/include.dDebian / Ubuntu系统上的常规nginx配置文件中来的原因。
Moritz Bunkus 2012年

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.