在我的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)
预先感谢
答案 0 :(得分: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将使用此指令块以处理与任何其他服务器块都不匹配的任何请求,因此该请求将落在此处。
第二个块具有一组有效的指令,因此它可以工作。