Nginx
為什麼 Nginx 的 proxy_intercept_errors 指令需要重寫才能正常工作?
以下是 Nginx 伺服器配置範例。如果沒有“魔法護身符”位置塊,代理錯誤內容會導致 Nginx 404 頁面,而不是提供自定義的錯誤頁面。
刪除 proxy_intercept_errors 指令會提供帶有正確 http 錯誤程式碼標頭的正確代理錯誤頁面。
無論魔法護身符是否存在,非代理錯誤頁面都會正確呈現。
關於到底發生了什麼的任何想法?
server { server_name mydomain.com ""; listen 80; root /var/www; error_page 400 401 402 403 404 500 501 502 503 504 /admin/error_page.htm; proxy_intercept_errors on; location /proxy/ { proxy_read_timeout 60s; proxy_set_header Host $host; proxy_pass http://myservers; } location /test404/ { return 404; } location /admin/ { # this line constitute a magical talisman that fixes proxied error interception(???)(!) rewrite ^(/admin)(.*)$ /admin$2 break; } }
很抱歉,這個答案來晚了,但到目前為止,使用目前的 v1.8.1 穩定版本,您提供的配置應該可以在沒有任何護身符的情況下工作。
如果您提供了您正在試驗的版本,則可以查看是否已糾正錯誤或配置是否存在缺陷。
我建議你仔細檢查你的配置,因為你絕對不需要這個
/admin/
位置,也不需要它包含的rewrite
指令。請特別注意刪除不屬於此測試的所有內容(並且您沒有顯示),因為它可能會干擾。作為最後的手段,您可以嘗試以下成功測試的配置片段,然後慢慢整合更改,看看結果與預期不同:
server { listen 80; listen [::]:80; server_name example.org; location /proxy { return 418 "Host: $host, Connection: $http_connection"; } } server { listen 80; listen [::]:80; server_name example.com; root /var/ious/files; error_page 418 = /error_page.html; proxy_intercept_errors on; location /proxy { proxy_pass http://example.org; } }