【问题标题】:Nginx including conf from conf.d but still loading default settingsNginx 包括来自 conf.d 的 conf,但仍加载默认设置
【发布时间】:2016-10-04 02:12:04
【问题描述】:

所有配置都包含在内,并且 conf 测试也通过了。但是 Nginx 仍然提供来自/usr/share/nginx/html 的默认 HTML,而不是来自 conf.d 目录中 conf 文件的位置根目录。

conf 文件来自 conf.d 目录

upstream django {
    server          unix:///tmp/server.sock;
}

server {
    listen          80;
    server_name     server.test.com;
    access_log      /srv/source/logs/access-nginx.log;
    error_log       /srv/source/logs/error-nginx.log;

    location / {
        uwsgi_pass      django;
        include         /srv/source/conf/uwsgi/params;
    }

    location /static/ {
        root            /srv/source/;
        index           index.html index.htm;
    }

    location /media/ {
        root            /srv/source/media/;
        index           index.html index.htm;
    }

    # alias favicon.* to static
    location ~ ^/favicon.(\w*)$ {
        alias /srv/source/static/favicon.$1;
    }

}

【问题讨论】:

  • 您是否 100% 确定您将服务器称为 server.test.com ?因为这可能是个问题 - 您将被重定向到在别处定义的默认服务器

标签: django nginx uwsgi


【解决方案1】:

默认的nginx 配置位于/etc/nginx/nginx.conf。默认情况下,该文件包含以下几行(至少在基于 rhel 和基于 arch 的发行版上是这样):

include /etc/nginx/conf.d/*.conf;

server {
    listen       80 default_server;
    listen       [::]:80 default_server;
    server_name  _;
    root         /usr/share/nginx/html;

    # Load configuration files for the default server block.
    include /etc/nginx/default.d/*.conf;

    location / {
    }

    error_page 404 /404.html;
        location = /40x.html {
    }

    error_page 500 502 503 504 /50x.html;
        location = /50x.html {
    }
}

感谢server 部分中的root nginx 将继续提供该目录下的文件,直到您评论我们的这些行。这发生在 conf.d 加载之后(如上面的 sn-p 中所述)。

无论您在conf.d 中进行什么更改,文件的最后一部分仍然会被加载。因为是那个文件 (/etc/nginx/nginx.conf) 加载了 conf.d 中的配置。

是的,如果您打算使用nginx,您绝对应该注释掉默认的server

【讨论】:

  • 这是不正确的。在 nginx 配置中拥有多个服务器块是非常好的,并且一个配置不会干扰另一个配置。
  • @solarissmoke 不确定是否正确,但 grochmal 的解决方案有效,只要我注释掉默认服务器,我的应用程序就开始工作了。
  • @rayman 这是因为如果未指定另一个服务器,您的另一个服务器将成为默认服务器。 @Jerzyk 的评论指出了实际问题所在 - 您的 server_name 很可能与您所服务的主机不匹配。
  • 我放置这个名称只是为了阐述服务器名称与主机名完全匹配。
  • 我更担心默认的server_name _;。如果他杀死了default_server,他可以正确调试自己的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-07-23
  • 1970-01-01
  • 2012-01-07
  • 2012-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多