代码之家  ›  专栏  ›  技术社区  ›  AleMal

第三个域请求上的nginx和gunicorn错误403

  •  0
  • AleMal  · 技术社区  · 7 年前

    在我的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演示和demo1上配置了服务器IP)nginx返回错误“403禁止”

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

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

    提前谢谢

    1 回复  |  直到 7 年前
        1
  •  1
  •   miknik    7 年前

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

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

    你没有 index try_files 指令,因此不带URI路径的请求被nginx解释为请求根目录的目录列表。

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

    对mytest.io的请求与 服务器名称 指令,但添加 default_server listen 第二个块中的指令意味着nginx将使用这个块来处理与任何其他服务器块不匹配的任何请求,以便请求在这里着陆。

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