Nginxのモジュール more_set_headers を使いたかったのですが。Passenger を使っている場合にはどのようにモジュールを追加したら良いのか解らなかったので調べました。
more_set_headersが必要なシーンはどんなときでしょう?以下の記事を参照してみましょう。
nginxで任意のHTTPヘッダーを追加したい場合にはadd_headerディレクティブを用いますが、add_headerディレクティブは追加しようとしたフィールド名が重複するHTTPヘッダーが既に用意されていた場合には既にある物に「,」区切りで連結してしまいます。たとえば強制的に出力するContent-Typeを変更するためにadd_header Content-Type text/css;のようにしてもContent-Type: text/html, text/cssといった形の不正なHTTPヘッダーが出力されてしまいます。http://memo.overknee.info/post/20308520977
解決方法は簡単でHTTP Headers More Moduleのmore_set_headersディレクティブをつかえばすぐです。使い方も簡単でadd_headerディレクティブをつかっている箇所をそのままmore_set_headers "Content-Type: text/css";と置きかえれば良いだけです。
このように、クロスドメインな環境を設定したい時に使ったりするNginxモジュールです。
more_set_headers 'Access-Control-Allow-Origin: *';以下。セットアップ方法です。
passengerがインストールされているか確認します。
$ gem list | grep passengerもし、なかったらインストールします。
$ gem install passenger作業ディレクトリに移動。
$ cd /usr/local/srcNginxを用意。
$ wget http://nginx.org/download/nginx-1.8.0.tar.gz $ tar -zxf nginx-1.8.0.tar.gzPassengerをインストール。
$ wget https://github.com/openresty/headers-more-nginx-module/archive/v0.26.tar.gz $ tar xvfz v0.26.tar.gz $ passenger-install-nginx-module 2. No: I want to customize my Nginx installation. (for advanced users) 2 # 2を選択 Where is your Nginx source code located? Please specify the directory: /usr/local/src/nginx-1.8.0 # Nginxのディレクトリを指定 Extra arguments to pass to configure script: --add-module=/usr/local/src/headers-more-nginx-module-0.26 # モジュールのディレクトリを指定インストールされたNginxを確認します。
# /opt/nginx/sbin/nginx -V nginx version: nginx/1.8.0 built by gcc 4.4.7 20120313 (Red Hat 4.4.7-11) (GCC) built with OpenSSL 1.0.1e-fips 11 Feb 2013 TLS SNI support enabled configure arguments: --prefix=/opt/nginx --with-http_ssl_module --with-http_gzip_static_module --with-http_stub_status_module --with-cc-opt=-Wno-error --with-pcre=/tmp/passenger.l7zbkj/pcre-8.34 --add-module=/usr/lib/ruby/gems/2.0.0/gems/passenger-5.0.7/ext/nginx --add-module=/usr/local/src/headers-more-nginx-module-0.26headers-more-nginx-module-0.26 の文字が見えます。
あとは、このバイナリをいつも使っているNginxと置き換えればOKです。