nginx.conf

nginx.conf

Eu tenho uma configuração de proxy Nginx onde adiciono vários cabeçalhos relacionados à segurança ao servidor para que eles retornem em todos os locais de proxy. Em alguns locais, preciso adicionar cabeçalhos adicionais (por exemplo, Content-Security-Policyto /), enquanto em outros locais específicos, preciso remover um dos cabeçalhos (por exemplo, X-Frame-Optionsfrom /framepage.html) adicionados no nível do 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";

Eu tentei o seguinte, mas nenhum deles parece remover o X-Frame-Optionscabeçalho da /framepage.htmlresposta do local:

  • add_header X-Frame-Options "";
  • proxy_set_header X-Frame-Options "";
  • proxy_hide_header X-Frame-Options;

Como posso remover o X-Frame-Optionscabeçalho da /framepage.htmlresposta de localização?

Responder1

Os atributos de configuração do cabeçalho são um pouco confusos, é isso que eles fazem:

proxy_set_headeré definir um cabeçalho de solicitação
add_headeré adicionar um cabeçalho à resposta
proxy_hide_headeré ocultar um cabeçalho de resposta

Se quiser substituir um cabeçalho que já existe na resposta não basta add_headerporque irá empilhar os valores (do servidor e daquele que você adicionou).

Você deve fazer isso em duas etapas:

1)remover cabeçalho:
proxy_hide_header Access-Control-Allow-Origin;

2)adicione seu valor de cabeçalho personalizado:
add_header Access-Control-Allow-Origin "*" always;

Responder2

Você pode usar o módulo headers_more. Exemplo:

location / {
    proxy_pass http://upstream_server/;
    more_clear_headers 'Access-Control-Allow-Origin';
}

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

Responder3

Você provavelmente poderia tentar usar o módulo "Headers More" de terceiros:

https://github.com/openresty/headers-more-nginx-module

E algo como:

load_module modules/ngx_http_headers_more_filter_module.so;

http {
    ...
    more_clear_headers 'X-Frame-Options';
    ...
}

Responder4

Usando oMódulo Nginx Lua.

Você precisará do nginx-extraspacote instalado. Por exemplo, no aptitude, faça um arquivo apt install nginx-extras.

Em 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, execute a nginx -Ve você verá http-lua. O ndk_http_module.soé necessário para carregar o ngx_http_lua_module.somódulo.

É sempre melhor executar um nginx -tpara verificar sua configuração também.

informação relacionada