雑多なブログ

音楽や語学、プログラム関連の話題について書いています

nginx: レスポンスヘッダから特定のヘッダを消す

nginxのレスポンスヘッダには、サーバー情報が出力されます。
普通にnginxをインストールした場合、バージョン表記については設定で非表示にできるのですが、サーバー名"nginx"という名称を消す事はできません。

ngx_headers_moreモジュールを使えば、ヘッダの書き換えができます。

www.nginx.com

導入方法

ubuntudebian系だと、パッケージ管理のツールでインストールできるようです(ubuntuにて検証)。

apt install libnginx-mod-http-headers-more-filter

ですが、CentOSではyum/dnfではインストールできないようなので、自分でモジュールをコンパイルする必要があります。

CentOSでのインストール方法

1. 各種ソースをダウンロードし解凍します

1-1. Webサーバーにインストールしているものと同じバージョンのnginxのソースをダウンロードします。

nginx.org

1-2. ngx_headers_moreのソースをダウンロードします(下記リンク参照)

github.com

2. モジュールのコンパイル

【/path/to/ngx_headers_more】、【/path/to/nginx_src】の部分には、解凍した各種ソースのパスを指定します。

cd 【/path/to/nginx_src】
./configure --with-compat --add-dynamic-module=【/path/to/ngx_headers_more】 --with-cc-opt=-Wno-error 

そしてビルドします。ここでmakeのターゲットをmodulesに指定すると、モジュールのバイナリーだけ出力してくれるようです。

make modules

ビルドされたバイナリーは、nginxのソース下の下記パスに出力されます。

objs/ngx_http_headers_more_filter_module.so

これを、適切なディレクトリーに移動し、こんな感じでモジュールの読み込みを指定すればモジュールが使用可能となります。

load_module /path/to/ngx_http_headers_more_filter_module.so;

色々な使い道はあるモジュールですが、最初に言及したサーバー情報の削除という点に関しては、下記のディレクティブを設定に追記すればOKです。

more_clear_headers "Server";

3. 注意点

検証できていないのですが、アップデートなどによりバージョンが変わると独自にコンパイルしていたモジュールが動かなくなる、という情報をネットで目にしました。

ということで、独自にビルドしたモジュールを使用している場合、nginxのアップデートの際は、モジュールの動作も含めて検証を行った上で本番環境に適用するのが良さそうです。