Nginx 子域配置 [英] Nginx subdomain configuration

查看:37
本文介绍了Nginx 子域配置的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有 nginx 作为 apache 的反向代理.我现在需要添加一个新的子域这将提供来自另一个目录的文件,但同时我希望默认主机的所有 location 和 proxy_pass 指令也适用于子域.

I have nginx acting as a reverse proxy to apache. I now need to add a new subdomain that will serve files from another directory, but at the same time I want all location and proxy_pass directives that I have for the default host to apply to the subdomain also.

我知道如果我将规则从默认主机复制到新的子域,它会起作用,但是子域有没有办法继承规则?下面是一个示例配置

I know that if I copy the rules from the default host to the new subdomain it will work, but is there a way for the subdomain to inherit the rules? Below is a sample configuration

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

谢谢

推荐答案

您可以将公共部分移动到另一个配置文件,并从两个服务器上下文中include.这应该有效:

You could move the common parts to another configuration file and include from both server contexts. This should work:

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,它看起来像这样:

Here's an example that's actually copied from my running server. I configure my basic server settings in /etc/nginx/sites-enabled (normal stuff for nginx on Ubuntu/Debian). For example, my main server bunkus.org's configuration file is /etc/nginx/sites-enabled and it looks like this:

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 上下文中:

As an example here's the /etc/nginx/include.d/all-common file that's included from both server contexts:

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

这篇关于Nginx 子域配置的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆