Cuando nginx está configurado como proxy inverso, ¿puede reescribir el encabezado del host en el servidor posterior como el ProxyPreserveHost de Apache?

Respuestas:

11

Creo que encontré una solución al problema. Enviar el host del servidor en sentido descendente es el comportamiento predeterminado en nginx, y lo he anulado usando la directiva:

proxy_set_header Host $host;

Que envía el host solicitado por el navegador al servidor en sentido descendente. Exactamente lo contrario de lo que quería.

Entonces, aunque nginx no tiene un equivalente al de Apache ProxyPreserveHost, el mismo comportamiento se puede lograr con la proxy_set_headerdirectiva, y la solución de nginx es más general.

polluelos
fuente
Debe ser proxy_set_header Host $http_host;.
Rob
@Rob, $http_hostno existe según los documentos de Nginx: nginx.org/en/docs/varindex.html
Daniel Serodio
1
@DanielSerodio En realidad, sí existe, al menos para el 99,99% de las conexiones. Ver la documentación . También difiere muy sutilmente de $host.
Michael Hampton
@MichaelHampton Estoy corregido, gracias por el enlace
Daniel Serodio
1

Un ejemplo de trabajo:

  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
fuente
Esto está usando nginx.
cod3fr3ak