Tengo una configuración de proxy Nginx donde agrego varios encabezados relacionados con la seguridad al servidor para que regresen a todas las ubicaciones del proxy. En algunas ubicaciones necesito agregar encabezados adicionales (por ejemplo, Content-Security-Policy
a /
), mientras que en otras ubicaciones específicas necesito eliminar uno de los encabezados (por ejemplo, X-Frame-Options
desde /framepage.html
) agregados en el nivel del servidor.
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";
Intenté lo siguiente, pero ninguno parece eliminar el X-Frame-Options
encabezado de la /framepage.html
respuesta de ubicación:
add_header X-Frame-Options "";
proxy_set_header X-Frame-Options "";
proxy_hide_header X-Frame-Options;
¿Cómo puedo eliminar el X-Frame-Options
encabezado de la /framepage.html
respuesta de ubicación?
Respuesta1
Los atributos de configuración del encabezado son un poco confusos, esto es lo que hacen:
proxy_set_header
es establecer un encabezado de solicitud
add_header
es agregar un encabezado a la respuesta
proxy_hide_header
es ocultar un encabezado de respuesta
Si desea reemplazar un encabezado que ya existe en la respuesta, no es suficiente add_header
porque acumulará los valores (del servidor y el que agregó).
Tienes que hacer esto en dos pasos:
1)eliminar encabezado:
proxy_hide_header Access-Control-Allow-Origin;
2)agregue su valor de encabezado personalizado:
add_header Access-Control-Allow-Origin "*" always;
Respuesta2
Puedes utilizar el módulo headers_more. Ejemplo:
location / {
proxy_pass http://upstream_server/;
more_clear_headers 'Access-Control-Allow-Origin';
}
Respuesta3
Probablemente podrías intentar utilizar el módulo de terceros "Más encabezados":
https://github.com/openresty/headers-more-nginx-module
Y algo como:
load_module modules/ngx_http_headers_more_filter_module.so;
http {
...
more_clear_headers 'X-Frame-Options';
...
}
Respuesta4
Utilizando elMódulo Nginx Lua.
Necesitará el nginx-extras
paquete instalado. Por ejemplo, en aptitude haz un apt install nginx-extras
.
En 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
}
}
Para verificar, ejecute a nginx -V
y verá http-lua
. Es ndk_http_module.so
necesario para cargar el ngx_http_lua_module.so
módulo.
Siempre es mejor ejecutar un nginx -t
para verificar también su configuración.