Eu tenho um proxy reverso no nginx que proxies alguns sites. Recentemente, habilitei a HTTP Strict Transport Security para todos os sites habilitados para SSL. Agora tenho um site que não deseja que isso esteja ativado.
Eu pensei em fazer uma verificação simples se o meu upstream já me enviou um Strict-Transport-Security
cabeçalho e, se não, basta adicionar uma. Dessa forma, meu upstream poderia enviar um cabeçalho STS contendo max-age=0
para evitar que o HSTS fosse ativado pelo proxy.
Eu pensei em mudar minha configuração da seguinte maneira:
location / {
proxy_pass http://webservers;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto "https";
if ($upstream_http_strict_transport_security = "") {
add_header Strict-Transport-Security "max-age=15552000";
}
}
Mas, provavelmente porque se é mau , isso não funciona. Eu tentei várias coisas diferentes para garantir que a variável realmente exista (qual é o caso), mas nada parece ajudar.
Como eu poderia fazer isso funcionar?
fonte
Isso
if
ocorre porque é executado antes do proxy ocorrer e, neste momento, não há variável$upstream_http_strict_transport_security
.Você pode usar a
header_filter_by_lua
diretiva do módulo Lua. Por exemplofonte
apt-get -t wheezy-backports install nginx-extras
.