すこぶる.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でconfigチェックした時にSSLエラーがでる「SSL_CTX_use_PrivateKey_file」

Nginxの設定ファイルが正しく記述されているかテストするときに、「nginx -t」コマンドを実行しテストします。 その実行時、下記のようなSSLに関するエラーが出ました。 [crayon-6746 …

HTTPS化に向けてWebサーバでSSL設定をするときのコツ

概要 Webサイトのセキュリティが案じられている現状で、各サイトのHTTPS(SSL化)への移行が急速に進んでいる。 GoogleもHTTPSサイトへの移行を推奨しており、SEO観点でも大きく影響して …

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

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

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

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

【Nginx】$upstream_cache_status-キャッシュステータスの見方

Nginx でキャッシュのステータスを確認する方法 まずNginxでキャッシュを使用している場合に、ユーザのリクエストに対して、キャッシュが効いているか確認する方法を紹介します。 やることは非常に簡単 …