nginx adiciona o cabeçalho a uma variável upstream_http_

13

Eu tenho um proxy reverso no nginx que procura alguns sites. Recentemente, habilitei o HTTP Strict Transport Security para todos os sites habilitados para SSL. Agora tenho um site que não quer que isso seja ativado.

Eu pensei em apenas fazer uma verificação simples se o meu upstream já me enviou um Strict-Transport-Security -header e, se não, basta adicionar um. Dessa forma, meu upstream poderia enviar um cabeçalho STS contendo max-age=0 para evitar que o HSTS ativasse o proxy.

Eu pensei em alterar minha configuração da seguinte forma:

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 é mal , isso não funciona. Eu tentei um monte de coisas diferentes para ter certeza de que a variável realmente existe (o que é o caso), mas nada parece ajudar.

Como eu poderia fazer isso funcionar?

    
por Gerry 23.05.2014 / 15:04

2 respostas

18

Isso não funciona porque o if é avaliado antes que o pedido seja passado para o backend, então as variáveis $ upstream_http_ ainda não têm nenhum valor. add_header com um valor vazio é ignorado, então você pode usar um mapa para adicionar condicionalmente o cabeçalho da seguinte forma:

map $upstream_http_strict_transport_security $sts {
  '' max-age=15552000;
}

server {
  location / {
    add_header Strict-Transport-Security $sts;
  }
}
    
por 23.05.2014 / 16:04
3

Isso porque if é executado antes do proxy e, neste momento, não há variável $upstream_http_strict_transport_security .

Você pode usar a diretiva header_filter_by_lua no módulo Lua. Por exemplo,

header_filter_by_lua 'if not ngx.header["X-Test"] then ngx.header["X-Test"] = "blah" end';
    
por 23.05.2014 / 16:02