是否有必要在nginx.conf中包含启用站点的目录?

时间:2017-09-17 17:19:22

标签: django nginx uwsgi

我正在关注Setting up Django and your web server with uWSGI and nginx教程。我被困在Configure nginx for your site部分。我尝试了搜索互联网的所有内容,主要是我试图修复我的配置mysite_nginx.conf文件,但现在看来它一直都是正确的。

这是我的配置文件mysite_nginx.conf,当然是/usr/local/etc/nginx/sites-enabled/的符号链接。

# mysite_nginx.conf

# the upstream component nginx needs to connect to
upstream django {
    server 127.0.0.1:8001;
}

# configuration of the server
server {
    listen                8000;
    server_name           localhost;
    charset               utf-8;
    client_max_body_size  75M;

    location /media  {
        alias /Users/username/dev/my_site/mysite/media;
    }

    location /static {
        alias /Users/username/dev/my_site/mysite/static;
    }

    location / {
        uwsgi_pass  django;
        include     /Users/username/dev/my_site/mysite/uwsgi_params;
    }
}

我遇到的问题

访问localhost:8000/media/img.jpglocalhost:8000/static/img.jpg始终返回404 Not Found。在nginx日志中,所有请求都映射到/usr/local/Cellar/nginx/version/html/,这是/usr/local/var/www/的符号链接,其中index.html5xx.html文件存在。

我的static/media/已添加到/usr/local/Cellar/nginx/version/html/,因此在nginx错误日志中,我看到了对/usr/local/Cellar/nginx/version/html/static/img.jpg的请求。

对我有用的解决方案

nginx.conf文件中,我已添加了启用网站的路径。在此之后,我的所有请求都映射到我添加的绝对路径,作为位置的别名,一切都按预期工作。

...

http {
    include       mime.types;
    include       /usr/local/etc/nginx/sites-enabled/*.conf;
    default_type  application/octet-stream;

...

问题

在我提到的教程中没有提到这个,所以我认为它应该可以在不编辑nginx.conf文件的情况下工作?但它对我没有用,我错过了什么吗?

1 个答案:

答案 0 :(得分:1)

首先,没有限制或必须遵循一种方法。您可以将所有配置放在一个nginx.conf中,也可以将其拆分为多个文件并包含它们,或者您可以在目录中包含特定模式。

不同的OS分发可能使用不同的配置类型的默认配置设置。常见的一种是nginx.conf使用include site-enabled/*.conf;include conf-enabled/*.conf;

逻辑是您在sites-availableconf-available目录中创建实际配置,然后分别在sites-enabledconf-enabled目录中对它们进行符号链接。所以明天如果要禁用配置,而不是重命名或删除它,只需从xxxx-enabled目录中删除符号链接即可。这只是一个约定,因此您可以更轻松地管理与自己文件中不同站点相关的虚拟主机。

默认情况下,这些默认配置适用于demo nginx页面。在设置配置之前,你应该禁用它,这样它就不会搞砸你的配置。

现在,有时包含可能不是默认nginx.conf的一部分。因为您使用brew安装了nginx,所以该安装中使用的配置是不同的。如果您检查下面包含的文件

include servers/*;

所以期望将它放在不同的地方。所以你必须要知道基本配置是nginx.conf(也可以通过从源代码编译nginx来改变)。然后它可以包含其他配置或选择不在nginx.conf本身中只有一个默认服务器。在学习任何教程之前,请先阅读nginx.conf文件。