【问题标题】:Nginx and gunicorn err 403 on third-domain request第三域请求上的 Nginx 和 gunicorn err 403
【发布时间】:2019-02-11 17:37:49
【问题描述】:

在我的 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(我已经在我的 dns demo 和 demo1 上配置了服务器 ip)nginx 返回错误“403禁止”

[error] 27554#0: *27 "/var/www/" 的目录索引被禁止

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

提前致谢

【问题讨论】:

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


    【解决方案1】:

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

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

    您在此块中没有 index 或 try_files 指令,因此 Nginx 将没有 uri 路径的请求解释为对根目录的目录列表的请求。

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

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

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

    【讨论】:

      猜你喜欢
      • 2019-10-29
      • 1970-01-01
      • 2014-02-19
      • 1970-01-01
      • 2016-04-24
      • 2017-09-19
      • 2015-03-31
      • 2021-05-19
      • 2012-05-23
      相关资源
      最近更新 更多