私は、すべてのプロキシの場所で返されるように、サーバーにいくつかのセキュリティ関連のヘッダーを追加する Nginx プロキシ セットアップを持っています。一部の場所では追加のヘッダー (例: Content-Security-Policy
to /
) を追加する必要がありますが、他の特定の場所では、サーバー レベルで追加されたヘッダーの 1 つ (例: X-Frame-Options
from /framepage.html
) を削除する必要があります。
nginx.conf
# ...
server {
# ...
include security-headers.conf;
location / {
proxy_pass http://web:5000/;
include security-headers.conf;
add_header Content-Security-Policy "my csp...";
}
location = /framepage.html {
proxy_pass http://web:5000/framepage.html;
# TODO: remove `X-Frame-Options` response header from this specific page
# Tried add_header X-Frame-Options "";
# Tried proxy_set_header X-Frame-Options "";
# Tried proxy_hide_header X-Frame-Options;
}
location /api/ {
proxy_pass http://api:5000/;
}
location /otherstuff/ {
proxy_pass http://otherstuff:5000/;
}
# ...
}
security-headers.conf
add_header Referrer-Policy same-origin;
add_header X-Frame-Options SAMEORIGIN;
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";
以下のことを試しましたが、いずれも位置情報の応答X-Frame-Options
からヘッダーを削除しないようです。/framepage.html
add_header X-Frame-Options "";
proxy_set_header X-Frame-Options "";
proxy_hide_header X-Frame-Options;
位置情報の応答X-Frame-Options
からヘッダーを削除するにはどうすればよいですか?/framepage.html
答え1
ヘッダー構成属性は少しわかりにくいですが、その機能は次のとおりです。
proxy_set_header
リクエストヘッダーを設定することは
add_header
、レスポンスにヘッダーを追加することであり、
proxy_hide_header
レスポンスヘッダーを非表示にすることです
add_header
応答内に既に存在するヘッダーを置き換えたい場合は、値 (サーバーからの値と追加した値) がスタックされるため、それだけでは不十分です。
これを 2 つの手順で実行する必要があります。
1)ヘッダーを削除:
proxy_hide_header Access-Control-Allow-Origin;
2)カスタム ヘッダー値を追加します。
add_header Access-Control-Allow-Origin "*" always;
答え2
headers_more モジュールを使用できます。例:
location / {
proxy_pass http://upstream_server/;
more_clear_headers 'Access-Control-Allow-Origin';
}
答え3
おそらく、サードパーティの「Headers More」モジュールを使用してみることもできます。
https://github.com/openresty/headers-more-nginx-module
そして、次のような内容です:
load_module modules/ngx_http_headers_more_filter_module.so;
http {
...
more_clear_headers 'X-Frame-Options';
...
}
答え4
使用方法Nginx Lua モジュール。
パッケージをインストールする必要がありますnginx-extras
。たとえば、aptitude で を実行しますapt install nginx-extras
。
でnginx.conf
:
load_module /usr/lib/nginx/modules/ndk_http_module.so;
load_module /usr/lib/nginx/modules/ngx_http_lua_module.so;
http {
...
header_filter_by_lua_block {
ngx.header["server"] = nil
}
}
確認するには、 を実行するnginx -V
と が表示されますhttp-lua
。 はモジュールndk_http_module.so
をロードするために必要ですngx_http_lua_module.so
。
nginx -t
構成を確認するためにも、常に を実行するのが最善です。