wancoro blog

学んだことをアウトプットしていきたいと思います

【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でしか使えないらしい。