すこぶる.net

技術系備忘録など

nginx

【Nginx】add_headerを複数箇所に記載すると消える(上書きされる)

投稿日:

Nginx でadd_headerを複数箇所に書く際の注意点

Nginxの設定ファイルでヘッダーを追加する場面は当然あると思います。
そんなとき server ディレクティブで add_header することですべての location ディレクティブにも設定が入れられます。

しかし、特定の location ディレクティブにおいて、 ヘッダーを追加したい場合があります。
例えば、Nginx + PHP-FPM 構成において、CSS などの静的ファイルには add_header したくないが、 PHP から返されるページ(html)には add_header したい場合です。

ここで注意(問題)があります。
上記のように設定してしまうと、 「location ~ ¥.php$」から返されるレスポンスには、上位のコンテキストである server ディレクティブで add_header した設定は消えてしまします。
ブラウザや curl などで確認すると add_header したヘッダーが消えている、もしくは効いていないように感じるかもしれません。
しかし、これは Nginx の仕様でありドキュメントにも記載があります。

Module ngx_http_headers_module

There could be several add_header directives. These directives are inherited from the previous level if and only if there are no add_header directives defined on the current level.

現在のコンテキストに add_header が書かれいていない場合に限り、上位コンテキストで記載されている add_header の設定を引き継ぐという説明です。
よって、下位のコンテキストで add_header を宣言する場合には同じ設定を書くか、more_set_headers を使用するとよいと思います。

知らないと少々ハマりそうな問題だと思ったので、参考になればと思います。

-nginx
-, ,

執筆者:

関連記事

【Nginx】キャッシュ作成時のバックエンドへのリクエストをproxy_cache_lockで制限する

概要 Nginx でキャッシュの有効期限が切れたとき、一勢にリクエストがバックエンドに流れることになります。。 そうなると、当然バックエンドサーバの負荷が大きくなりサービス障害につながるので注意が必要 …

【Nginx】DoS対策_limit_req_zone

Nginx で DoS 対策を行う方法 Web サイトを公開するにあたり、Nginx で簡単な DoS 攻撃対策を行う方法を紹介します。特別な方法ではなく最初から Nginx にある機能の紹介です。 …

【Nginx】変数の中身を確認しデバッグする方法

Nginx で変数をログに出力する Nginx を使用していると、実際に変数の中身を確認して設定を組みたい、特定の変数の中身をログに出力して確かめたい!なんてことがあると思います。 そんなときに役立つ …

NginxからプライベートのS3にリバースプロキシ

概要 Nginx から AWS にあるプライベートな S3 のバケットにリバースプロキシしたいという要件があったため、その方法をご紹介します。 AWS にある EC2 上からであれば、IAM Role …

【Nginx】Amazon S3へリバースプロキシ

Nginx から Amazon S3 へリバースプロキシ 今回は Nginx から Amazon S3 へリバースプロキシする方法について触れたいと思います。 ( 以前はプライベートな S3 へのリバ …