Nginx
找不到遠端error_page時如何使用本地error_page?
我正在嘗試為我的 error_page 創建一個備份。基本上,邏輯應該如下所示:
- 載入 foobar.html
- 遠端伺服器上不存在 -> 從遠端伺服器載入 404.html 以顯示 404 頁面
- 遠端伺服器上不存在 -> 在本地文件系統上傳入 404.html
載入兩者
localhost/404.html
並localhost/global404.html
正常工作,但是當我中斷localhost/404.html
(通過從 http 伺服器中刪除文件)時,它不會global404.html
像我期望的那樣顯示頁面。server { listen 80; server_name example.com www.example.com; proxy_intercept_errors on; location / { proxy_pass http://localhost:3000; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $remote_addr; error_page 404 /404.html; } location /404.html { proxy_pass http://localhost:3000/404.html; error_page 404 /global404.html; } location /global404.html { root /usr/share/nginx/html; } }
當我點擊時,上面的工作正常
http://localhost/404.html
(當 404.html 文件位於遠端伺服器上時,它顯示,當我刪除文件時,它會載入 global404.html 文件)。但是,當我鍵入一個不存在的頁面時,我只會得到預設的 nginx 404 頁面。
由於對該問題留下的評論措辭,我設法找到了
recursive_error_pages
允許 cascading/recursive 的選項error_pages
。我覺得在文件中遺漏了它很愚蠢。但是,簡單地做
server { listen 80; server_name example.com www.example.com; proxy_intercept_errors on; recursive_error_pages on; location / { proxy_pass http://localhost:3000; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $remote_addr; error_page 404 /404.html; } location /404.html { proxy_pass http://localhost:3000/404.html; error_page 404 /global404.html; } location /global404.html { root /usr/share/nginx/html; } }
發揮了魅力。我喜歡 nginx。