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 delocation @301
, o nginx tentará servir o arquivo requisitado do sistema de arquivos; Isso provavelmente resultará em404
, portanto, você receberá uma página404
; Observe que o cabeçalhoLocation
ainda será preservado, mas oX-Header
estará ausente de uma404 Not Found
página, porque, de acordo com a documentação da diretivaadd_header
, ele não permite adicionar cabeçalhos ao erro páginas; -
com um
return 301;
simples dentro delocation @301
, você limpará com eficácia oLocation
, portanto, seuLocation
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 .