Como posso adicionar um cabeçalho personalizado apenas em redirecionamentos

1

Eu quero alterar o cabeçalho do controle de cache quando houver um código relacionado ao redirecionamento de HTTP (30x).

Como posso verificar o código HTTP da resposta para ver se devo executar add_header

    
por Cornwell 01.03.2016 / 14:48

2 respostas

1

O seguinte deve funcionar:

server {
    listen 60729;
    error_page 301 @301;
    return 301 http://example.su/test;
    location @301 {
        add_header X-Header value;
        return 301 $sent_http_location;
    }
}

Esta é a confirmação:

%curl -v localhost:60729 | & fgrep \
    -e HTTP/ -e X-Header -e Location -e title | sed 's#^#\t#g'
> GET / HTTP/1.1
< HTTP/1.1 301 Moved Permanently
< Location: http://example.su/test
< X-Header: value
<head><title>301 Moved Permanently</title></head>

Note que cada parte da configuração é muito importante:

  • a diretiva error_page fornece efetivamente uma capacidade de manipulação de exceções muito nítida para o nginx;

  • sem return 301 dentro de location @301 , o nginx tentará servir o arquivo requisitado do sistema de arquivos; Isso provavelmente resultará em 404 , portanto, você receberá uma página 404 ; Observe que o cabeçalho Location ainda será preservado, mas o X-Header estará ausente de uma 404 Not Found página, porque, de acordo com a documentação da diretiva add_header , ele não permite adicionar cabeçalhos ao erro páginas;

  • com um return 301; simples dentro de location @301 , você limpará com eficácia o Location , portanto, seu Location estará vazio; Assim, você precisa usar $sent_http_ para preservar o valor atual.

Se você quiser experimentar o meu POC MVP como acima, você pode encontrar a configuração completa em meu GitHub em link .

    
por 28.08.2017 / 03:05
-1

Isso deve funcionar se você estiver fazendo os redirecionamentos no nginx. Você terá que construir o Nginx com o módulo headers_more, que é muito fácil - veja meu tutorial Nginx aqui .

 location /match/ {
   add_header HEADER_NAME "header value";
   return 301 https://example.com;
 }

Se você estiver fazendo proxy por meio de um aplicativo que está retornando redirecionamentos, ele será um pouco mais complexo, provavelmente envolvendo instruções IF. IF no nginx nem sempre funciona como esperado, então é melhor que você altere o aplicativo nesse caso.

    
por 01.03.2016 / 19:19

Tags