nginx.conf

nginx.conf

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-Policya /), mientras que en otras ubicaciones específicas necesito eliminar uno de los encabezados (por ejemplo, X-Frame-Optionsdesde /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-Optionsencabezado de la /framepage.htmlrespuesta 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-Optionsencabezado de la /framepage.htmlrespuesta de ubicación?

Respuesta1

Los atributos de configuración del encabezado son un poco confusos, esto es lo que hacen:

proxy_set_headeres establecer un encabezado de solicitud
add_headeres agregar un encabezado a la respuesta
proxy_hide_headeres ocultar un encabezado de respuesta

Si desea reemplazar un encabezado que ya existe en la respuesta, no es suficiente add_headerporque 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';
}

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

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-extraspaquete 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 -Vy verá http-lua. Es ndk_http_module.sonecesario para cargar el ngx_http_lua_module.somódulo.

Siempre es mejor ejecutar un nginx -tpara verificar también su configuración.

información relacionada