Nginx
Nginx: / 用於靜態內容和代理應用程序
http://example.com
: 我的網站http://example.net
: 代理後端我正在嘗試將 nginx 伺服器塊設置為靜態內容伺服器和反向代理。Nginx 應該首先檢查靜態文件,如果不存在文件,則重定向到代理應用程序。它是這樣配置的:
location @backend { proxy_pass http://example.net; } location / { try_files $uri $uri/ @backend; }
但是,使用這樣的配置訪問
http://example.com
返回一個403 Forbidden
: 似乎 nginx 試圖提供一個靜態文件夾,沒有找到一個index.html
並且在沒有代理的情況下失敗example.net
。然後我必須明確添加一條路線/
:location = / { proxy_pass http://example.net; }
這種方式
http://example.com/
被正確代理到http://example.net
. 但是這樣的配置感覺很奇怪:有沒有更好的代理方式/
?
該
$uri/
子句導致了問題。如果您不需要將尾隨
/
添加到代表靜態目錄的 URI,您可以使用:location / { try_files $uri @backend; }
或者,您現有的解決方案也適用於 a
try_files
而不是 duplicateproxy_pass
:location = / { try_files $uri @backend; }
有關更多資訊,請參閱此文件。