Quando o nginx é configurado como proxy reverso, ele pode reescrever o cabeçalho do host no servidor downstream, como o ProxyPreserveHost do Apache?

Respostas:

11

Acho que encontrei uma solução para o problema. Enviar o host do servidor downstream é o comportamento padrão no nginx, e eu o substituí usando a diretiva:

proxy_set_header Host $host;

Que envia o host solicitado pelo navegador para o servidor downstream. Exatamente o oposto do que eu queria.

Portanto, embora o nginx não tenha um equivalente ao Apache ProxyPreserveHost, o mesmo comportamento pode ser alcançado com a proxy_set_headerdiretiva, e a solução do nginx é mais geral.

pintinhos
fonte
Deveria ser proxy_set_header Host $http_host;.
Rob
@Rob, $http_hostnão existe de acordo com o Nginx docs: nginx.org/en/docs/varindex.html #
Daniel Serodio
1
@DanielSerodio Na verdade, sim, existe, pelo menos para 99,99% das conexões. Veja a documentação . Também difere muito sutilmente $host.
Michael Hampton
@MichaelHampton Estou corrigido, obrigado pelo link #
Daniel Serodio
1

Um exemplo de trabalho:

  set $s3_bucket 'SOMEBUCKET.s3.amazonaws.com';

  location / {
        send_timeout 5m;
        proxy_read_timeout 240;
        proxy_send_timeout 240;
        proxy_connect_timeout 240;
        proxy_http_version 1.1;
        proxy_set_header Host $s3_bucket;
        proxy_set_header Authorization '';
        proxy_hide_header x-amz-id-2;
        proxy_hide_header x-amz-request-id;
        proxy_ignore_headers "Set-Cookie";
        proxy_buffering off;
        proxy_intercept_errors on;
        proxy_redirect off;
        resolver 8.8.8.8;
        proxy_pass http://$s3_bucket;
        }
cod3fr3ak
fonte
Isso está usando o nginx.
Cod3fr3ak