nginxプロキシでアップストリームサーバが返す一部のレスポンスヘッダを消したい。
アップストリーム側で出力しているヘッダがあり、nginxプロキシ側でも同様にadd_header
でヘッダを出力している場合にヘッダが重複してしまう。例えばmattermostのdocker版では、一部のページでX-Frame-Options
が重複して出力されてしまう?ようだが、どのページかは言及されていない。ただパッと見た限りではloginページくらいか?ブラウザはエラーにはならないが、できれば取り除きたい。
Duplicate X-Frame-Options header ?? Issue #468 ?? mattermost/mattermost-docker
I noticed in an installation of Mattermost via the Docker container that it sends the "X-Frame-Options: SAMEORIGIN" head...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
$ curl -s -D- -o /dev/null -L http://localhost:8090/ HTTP/1.1 200 OK Server: nginx Date: Sat, 05 Dec 2020 13:43:39 GMT Content-Type: text/html; charset=utf-8 Content-Length: 3091 Connection: keep-alive Accept-Ranges: bytes Cache-Control: no-cache, max-age=31556926, public Content-Security-Policy: frame-ancestors 'self'; script-src 'self' cdn.rudderlabs.com Last-Modified: Sat, 05 Dec 2020 12:22:43 GMT X-Frame-Options: SAMEORIGIN X-Ratelimit-Limit: 101 X-Ratelimit-Remaining: 100 X-Ratelimit-Reset: 1 X-Request-Id: 9aj5r69r8bbn5mjotwgf7xkg9w X-Version-Id: 5.29.0.5.29.1.af2700671330c5f425f496fdaf9d92ab.false X-Frame-Options: SAMEORIGIN X-Content-Type-Options: nosniff X-XSS-Protection: 1; mode=block |
ソースを調査するかぎりでは、ソース内に直書きされているので管理画面で削除するといったことはできなさそうだった。
mattermost/web/handlers.go at 3099128bbd4faa1cdcf716182e2cc43c294badfd ?? mattermost/mattermost
Mattermost is an open source platform for secure collaboration across the entire software development lifecycle.. - matt...
mattermostのdocker版は、nginxコンテナでsecurity.confというファイルが読み込まれるようになっている。その中で以下の3つのヘッダがレスポンスヘッダに追加される。X-Frame-Options SAMEORIGIN;
が追加されていることが分かる。
1 2 3 4 |
server_tokens off; add_header X-Frame-Options SAMEORIGIN; add_header X-Content-Type-Options nosniff; add_header X-XSS-Protection "1; mode=block"; |
proxy_hide_header
このディレクティブは、ngx_http_proxy_moduleというモジュールで使えるものだが、デフォルトで組み込まれているモジュールのため使用できる。以下のように指定する。
1 |
proxy_hide_header X-Frame-Options; |
以下をconfに設定して反映してみよう。
nginxコンテナのconfをコピーしてきて、
1 |
docker cp mattermost-docker_web_1:/etc/nginx/conf.d/mattermost.conf . |
以下のように編集する。オリジナルのconfとの差は以下のとおり。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
$ diff -u mattermost.conf.org mattermost.conf --- mattermost.conf.org 2020-12-05 21:31:56.000000000 +0900 +++ mattermost.conf 2020-12-05 22:05:41.000000000 +0900 @@ -7,6 +7,8 @@ listen 80; location ~ /api/v[0-9]+/(users/)?websocket$ { + proxy_hide_header X-Frame-Options; + proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; client_max_body_size 50M; @@ -22,6 +24,7 @@ } location / { + proxy_hide_header X-Frame-Options; gzip on; client_max_body_size 50M; |
編集したconfを反映する。
1 2 3 4 5 6 7 |
$ docker cp mattermost.conf mattermost-docker_web_1:/etc/nginx/conf.d/mattermost.conf $ docker exec -it mattermost-docker_web_1 chown root:root /etc/nginx/conf.d/mattermost.conf $ docker-compose exec web nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful $ docker-compose kill -s SIGHUP web Killing mattermost-docker_web_1 ... done |
ページにアクセスしてみると重複は解消されている。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
$ curl -s -D- -o /dev/null -L http://localhost:8090/ HTTP/1.1 200 OK Server: nginx Date: Sat, 05 Dec 2020 13:47:36 GMT Content-Type: text/html; charset=utf-8 Content-Length: 3091 Connection: keep-alive Accept-Ranges: bytes Cache-Control: no-cache, max-age=31556926, public Content-Security-Policy: frame-ancestors 'self'; script-src 'self' cdn.rudderlabs.com Last-Modified: Sat, 05 Dec 2020 12:22:43 GMT X-Ratelimit-Limit: 101 X-Ratelimit-Remaining: 100 X-Ratelimit-Reset: 1 X-Request-Id: h3jan8rdtidtpqy7kfojb8wyna X-Version-Id: 5.29.0.5.29.1.af2700671330c5f425f496fdaf9d92ab.false X-Frame-Options: SAMEORIGIN X-Content-Type-Options: nosniff X-XSS-Protection: 1; mode=block |
他のアプローチとして、headers-more-nginx-moduleというモジュールがあるが、これは別途組み込みが必要なようだ。
Error 404
Error - file not found
参考リンク
- http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_hide_header
- https://nginx.org/en/docs/configure.html
- https://github.com/mattermost/mattermost-docker
- https://www.nginx.com/resources/wiki/modules/headers_more/
コメント