Ich habe ein Nginx-Proxy-Setup, bei dem ich dem Server mehrere sicherheitsrelevante Header hinzufüge, damit sie an allen Proxy-Standorten zurückgegeben werden. An einigen Standorten muss ich zusätzliche Header hinzufügen (z. B. Content-Security-Policy
to ), während ich an anderen bestimmten Standorten einen der auf Serverebene hinzugefügten /
Header entfernen muss (z. B. 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";
Ich habe Folgendes versucht, aber nichts davon scheint den X-Frame-Options
Header aus der /framepage.html
Standortantwort zu entfernen:
add_header X-Frame-Options "";
proxy_set_header X-Frame-Options "";
proxy_hide_header X-Frame-Options;
Wie kann ich den X-Frame-Options
Header aus der /framepage.html
Standortantwort entfernen?
Antwort1
Die Header-Konfigurationsattribute sind etwas verwirrend. Sie haben folgende Funktion:
proxy_set_header
dient zum Festlegen eines Anforderungsheaders.
add_header
dient zum Hinzufügen eines Headers zur Antwort.
proxy_hide_header
dient zum Ausblenden eines Antwortheaders.
Wenn Sie einen Header ersetzen möchten, der in der Antwort bereits vorhanden ist, reicht dies nicht aus, add_header
da dadurch die Werte (vom Server und der von Ihnen hinzugefügte) gestapelt werden.
Dies müssen Sie in zwei Schritten tun:
1)Header entfernen:
proxy_hide_header Access-Control-Allow-Origin;
2)Fügen Sie Ihren benutzerdefinierten Header-Wert hinzu:
add_header Access-Control-Allow-Origin "*" always;
Antwort2
Sie können das Modul headers_more verwenden. Beispiel:
location / {
proxy_pass http://upstream_server/;
more_clear_headers 'Access-Control-Allow-Origin';
}
Antwort3
Sie könnten wahrscheinlich versuchen, das Drittanbietermodul „Headers More“ zu verwenden:
https://github.com/openresty/headers-more-nginx-module
Und etwas in der Art von:
load_module modules/ngx_http_headers_more_filter_module.so;
http {
...
more_clear_headers 'X-Frame-Options';
...
}
Antwort4
Verwendung derNginx Lua-Modul.
Sie müssen das nginx-extras
Paket installiert haben. Führen Sie beispielsweise in Aptitude Folgendes aus apt install nginx-extras
.
In 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
}
}
Führen Sie zur Überprüfung ein aus nginx -V
und Sie sehen http-lua
. Das ndk_http_module.so
wird zum Laden des ngx_http_lua_module.so
Moduls benötigt.
Am besten führen Sie nginx -t
auch immer einen aus, um Ihre Konfiguration zu überprüfen.