nginxで既存のHTTPヘッダーを上書きして送出する方法
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をインストールすることが可能です。