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-Policy
to /
), enquanto em outros locais específicos, preciso remover um dos cabeçalhos (por exemplo, X-Frame-Options
from /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-Options
cabeçalho da /framepage.html
resposta 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-Options
cabeçalho da /framepage.html
resposta 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_header
porque 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';
}
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-extras
pacote 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 -V
e você verá http-lua
. O ndk_http_module.so
é necessário para carregar o ngx_http_lua_module.so
módulo.
É sempre melhor executar um nginx -t
para verificar sua configuração também.