Nginx

如何在 Nginx 中為 400 和 500 proxy_pass 後端響應設置自定義標頭?

  • January 28, 2017

我需要根據 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
}

任何幫助表示讚賞。

我想出了以下解決方案。它解決了以下問題:

  1. 根據來自 proxy_pass 後端的響應程式碼設置 HTTP 響應標頭
  2. 允許從後端伺服器 404 頁面內容,但仍添加標題。

已知問題:

  1. 從技術上講,如果它是 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;
}

將此問題視為參考

這個

這種方法有什麼問題/擔憂嗎?

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