Nginx

Nginx: / 用於靜態內容和代理應用程序

  • October 5, 2017
  • 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;
}

或者,您現有的解決方案也適用於 atry_files而不是 duplicate proxy_pass

location = / {
   try_files $uri @backend;
}

有關更多資訊,請參閱此文件

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