Nginx
如何在 Nginx 中為 400 和 500 proxy_pass 後端響應設置自定義標頭?
我需要根據 proxy_pass 後端響應程式碼的響應設置不同的自定義響應標頭值。
我嘗試了許多不同的方法,但仍然無法弄清楚如何做到這一點。
location /mypath { #for 200,301,302,etc "good" responses from 127.0.0.1:8080 I need to set value 60 add_header X-MyCustomHeader 60; proxy_set_header Host $host; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://127.0.0.1:8080; #for 404,403 responses from 127.0.0.1:8080 I need to set X-MyCustomHeader=5 #for 500 responses from 127.0.0.1:8080 I need to set X-MyCustomHeader=1 }
任何幫助表示讚賞。
我想出了以下解決方案。它解決了以下問題:
- 根據來自 proxy_pass 後端的響應程式碼設置 HTTP 響應標頭
- 允許從後端伺服器 404 頁面內容,但仍添加標題。
已知問題:
- 從技術上講,如果它是 404,它將呼叫後端兩次。對我來說這不是問題,因為我正在記憶體 404 響應和一些小 ttl。但對其他人來說可能是。
我的來源:
location /mypath/ { add_header X-MyCustomHeader 60; include /etc/nginx/proxy_config.conf; #some proxy_pass headers proxy_pass http://127.0.0.1:8080; proxy_intercept_errors on; error_page 500 502 503 504 /50x.html; error_page 400 403 404 =404 /mypath/errors/404.html; } # custom 50x fallback page for /mypath/, server from the nginx itself location /50x.html { add_header X-MyCustomHeader 1; root html; } # custom 40x fallback page for /mypath/, served from the backend - hack location /mypath/errors/404.html { add_header X-MyCustomHeader 5; include /etc/nginx/proxy_config.conf; #some proxy_pass headers proxy_pass http://127.0.0.1:8080; proxy_intercept_errors off; }
將此問題視為參考
而這個
這種方法有什麼問題/擔憂嗎?