メインコンテンツまでスキップ

nginxで既存のHTTPヘッダーを上書きして送出する方法

Yamagishi Kazutoshi
Software Engineer

nginxで任意のHTTPヘッダーを追加したい場合にはadd_headerディレクティブを用いますが、add_headerディレクティブは追加しようとしたフィールド名が重複するHTTPヘッダーが既に用意されていた場合には既にある物に「,」区切りで連結してしまいます。たとえば強制的に出力するContent-Typeを変更するためにadd_header Content-Type text/css;のようにしてもContent-Type: text/html, text/cssといった形の不正なHTTPヘッダーが出力されてしまいます。

解決方法は簡単でHTTP Headers More Moduleのmore_set_headersディレクティブをつかえばすぐです。使い方も簡単でadd_headerディレクティブをつかっている箇所をそのままmore_set_headers "Content-Type: text/css";と置きかえれば良いだけです。add_headerディレクティブとはちがい単一の引数にコロン区切りフィールド名とその中身のどちらも入れることになるので、その点は注意が必要です。

HTTP Headers More Moduleは通常のインストールでは多くの場合いっしょに入れられないので、nginxの公式Wikiにある記載を参考にしてコンパイル時のオプションを適切に変更すれば良いでしょう。またDebian GNU/Linuxであればもっと簡単にaptitudeでのインストール時にnginx-fullではなくnginx-extrasを指定することによりHTTP Headers More Moduleがつかえるようにコンパイルされたnginxをインストールすることが可能です。