nginx 在提供静态文件+反向代理时出现 403

nginx 在提供静态文件+反向代理时出现 403

我正在尝试通过 nginx 为节点应用程序提供服务,但首先尝试提供可能位于/public文件夹中的静态文件。我已经做了很多工作——但在访问domain.tld/或静态文件夹的索引时,我得到了 403; directory index of "/var/www/domain.tld/" is forbidden。所有权限似乎都正确,所以我很困惑。

这是我的服务器块;

server {
    server_name domain.tld;

    location / {
        root /var/www/domain.tld/public;
        try_files $uri $uri/ @proxy;
        access_log off;
    }

    location @proxy {
        proxy_pass http://127.0.0.1:3000;
    }
 }

访问任何随机页面(包括假定的子目录)都会正确代理到节点应用程序。但是,对于根目录 / 和任何现有静态目录的根目录,则会出现 403。

有任何想法吗?

答案1

这是因为目录存在,因此try_files检查

try_files $uri $uri/ @proxy;

成功。但没有目录索引文件(通常index.html,请参阅指数),并且autoindex也没有打开(参见自动索引)。

根据您希望发生的情况,考虑以下选项:

  • 保持原样(并可以调整使用的索引文件)。
  • 始终将目录传递给后端。删除$uri/即可try_files,即:

    location /
        root /var/www/domain.tld/public;
        try_files $uri @proxy;
    }
    
  • 通过以下方式检查特定的索引文件try_files(如果未找到,请求将转到后端):

    location /
        root /var/www/domain.tld/public;
        try_files $uri $uri/index.html @proxy;
    }
    
  • 使能够autoindex

    location /
        root /var/www/domain.tld/public;
        try_files $uri $uri/ @proxy;
        autoindex on;
    }
    

相关内容