nginx.conf

nginx.conf

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-Policyto ), während ich an anderen bestimmten Standorten einen der auf Serverebene hinzugefügten /Header entfernen muss (z. B. X-Frame-Optionsfrom )./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-OptionsHeader aus der /framepage.htmlStandortantwort 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-OptionsHeader aus der /framepage.htmlStandortantwort entfernen?

Antwort1

Die Header-Konfigurationsattribute sind etwas verwirrend. Sie haben folgende Funktion:

proxy_set_headerdient zum Festlegen eines Anforderungsheaders.
add_headerdient zum Hinzufügen eines Headers zur Antwort.
proxy_hide_headerdient zum Ausblenden eines Antwortheaders.

Wenn Sie einen Header ersetzen möchten, der in der Antwort bereits vorhanden ist, reicht dies nicht aus, add_headerda 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';
}

https://www.nginx.com/resources/wiki/modules/headers_more/

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-extrasPaket 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 -Vund Sie sehen http-lua. Das ndk_http_module.sowird zum Laden des ngx_http_lua_module.soModuls benötigt.

Am besten führen Sie nginx -tauch immer einen aus, um Ihre Konfiguration zu überprüfen.

verwandte Informationen