web-dev-qa-db-ja.com

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
}

どんな助けでも大歓迎です。

2
vgrinko

私は次の解決策を考え出しました。それは以下を解決します:

  1. Proxy_passバックエンドからの応答コードに基づいてHTTP応答ヘッダーを設定します
  2. バックエンドから404ページのコンテンツをサーバーに許可しますが、ヘッダーを追加します。

既知の問題:

  1. 技術的には、404の場合、バックエンドを2回呼び出します。小さなttlで404応答をキャッシュしているので、私にとっては問題ではありません。しかし、他の人にとってはそうかもしれません。

私の情報源:

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;
}

この質問を参照してください

そして これ

このアプローチに問題/懸念はありますか?

2
vgrinko