Nginx和Gunicorn错误403在第三域请求下

时间:2018-09-06 12:40:52

标签: nginx gunicorn multi-tenant http-status-code-403

在我的nginx服务器中,我将这样的nginx.conf设置为与gunicorn(和django应用程序)一起使用:

server {
    server_name  *.mytest.io;
    root         /var/www;
}

server {
    listen       80 default_server;
    listen       [::]:80 default_server;
    server_name  ~^(?<account>.+)\.mytest\.io$;
    root         /var/www;


#add_header Test $account;  

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

    location /static/ {
        alias /var/www/web/core/frontend/static/;
    }       

    location / {
        proxy_pass http://127.0.0.1:8000;
        proxy_set_header X-Forwarded-Host $server_name;
        proxy_set_header X-Real-IP $remote_addr;
        #add_header P3P 'CP="ALL DSP COR PSAa PSDa OUR NOR ONL UNI COM NAV"';
        add_header P3P $account;
    }

现在如果我调用mytest.io都完成了,但是如果我调用了demo.mytest.io或demo1.mytest.io(我已经在具有服务器ip的dns demo和demo1上进行配置),nginx返回错误“ 403禁止”

  

[错误] 27554#0:* 27目录索引“ / var / www /”被禁止

为什么对于主域没有问题,为什么对于子域请求却在同一位置出现错误? (/ var / www)

预先感谢

1 个答案:

答案 0 :(得分:1)

您有两个服务器块。对demo.mytest.io或demo1.mytest.io的请求将与此中的server_name指令匹配:

server {
    server_name  *.mytest.io;
    root         /var/www;
}

此块中没有indextry_files指令,因此Nginx将没有uri路径的请求解释为对根目录的目录请求。

您没有autoindex伪指令,默认情况下,该伪指令的值设置为off,这会阻止列出目录内容,因此您的请求被拒绝。

对mytest.io的请求与任一块中的server_name指令都不匹配,但是在第二块中的default_server指令中添加listen意味着Nginx将使用此指令块以处理与任何其他服务器块都不匹配的任何请求,因此该请求将落在此处。

第二个块具有一组有效的指令,因此它可以工作。