Nginx

提供靜態文件+反向代理時的nginx 403

  • June 2, 2016

我正在嘗試通過 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。

有任何想法嗎?

那是因為目錄存在,因此try_files檢查

try_files $uri $uri/ @proxy;

成功。但是沒有目錄索引文件(通常index.html參見index),autoindex也沒有打開(參見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;
}

引用自:https://serverfault.com/questions/780585