Quando nginx è configurato come proxy inverso, può riscrivere l'intestazione host sul server downstream come ProxyPreserveHost di Apache?


Risposte:


11

Penso di aver trovato una soluzione al problema. L'invio dell'host del server downstream è il comportamento predefinito in nginx e l'ho ignorato utilizzando la direttiva:

proxy_set_header Host $host;

Che invia l'host richiesto dal browser al server downstream. Esattamente il contrario di quello che volevo.

Quindi, sebbene nginx non abbia un equivalente di quello di Apache ProxyPreserveHost, lo stesso comportamento può essere raggiunto con la proxy_set_headerdirettiva e la soluzione di nginx è più generale.


Dovrebbe essere proxy_set_header Host $http_host;.
Rob,

@Rob, $http_hostnon esiste secondo i documenti di Nginx: nginx.org/en/docs/varindex.html
Daniel Serodio

1
@DanielSerodio In realtà, sì, esiste, almeno per il 99,99% delle connessioni. Vedere la documentazione . Si differenzia anche molto sottilmente $host.
Michael Hampton

@MichaelHampton Sono corretto, grazie per il link
Daniel Serodio

1

Un esempio funzionante:

  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;
        }

Questo sta usando nginx.
cod3fr3ak,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.