【NGINX】phusion/passenger-dockerでレスポンスヘッダーを編集する
やりたいこと
HTTPのレスポンスヘッダーにnginxなどのバージョン情報を表示させないようにしたい。
調べるとwget
でnginxを取得して展開するような記述が多いが、
今回はdockerイメージに phusion/passenger
を使用しており、
イメージ内にnginxが含まれているため、別の方法で実装したい。
実行環境
- docker
- phusion/passenger-ruby26
- nginx 1.14.0
修正前のレスポンスヘッダー
< status: 302 Found < cache-control: no-cache ... < x-powered-by: Phusion Passenger 6.0.4 * < server: nginx/1.14.0 + Phusion Passenger 6.0.4 *
*のついたやつを消したい。
実装方法
- nginxのモジュールをインストールする。
# Dockerfile RUN apt-get update \ && apt-get install -y \ libnginx-mod-http-headers-more-filter \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
- 設定ファイルを作成する。
# headers_filter.conf server_tokens off; more_clear_headers 'Server' 'X-Powered-By';
server_tokens off
: nginxのバージョンを削除
more_clear_headers
: 指定した行を削除
- 設定ファイルをDockerの
/etc/nginx/conf.d
配下に配置する
ADD ./headers_filter.conf /etc/nginx/conf.d/headers_filter.conf
/etc/nginx/main.d
とかもありますが、conf.d
でないと動かなかったので、こちらに置いてください。
めちゃめちゃ詰まりましたが、これだけでOK。
そのほか
more-clear_header
を複数行に分けて書くと動かなかった。
# headers_filter.conf server_tokens off; more_clear_headers 'Server'; more_clear_headers 'X-Powered-By';
nginx-plus-module-headers-more
というモジュールは商用nginxでしか使えないらしい。