Wenn nginx als Reverse-Proxy konfiguriert ist, kann es den Host-Header wie Apache's ProxyPreserveHost auf den Downstream-Server umschreiben?

Antworten:

11

Ich glaube, ich habe eine Lösung für das Problem gefunden. Das Senden des Hosts des Downstream-Servers ist das Standardverhalten in Nginx, und ich habe es mithilfe der folgenden Anweisung überschrieben:

proxy_set_header Host $host;

Dadurch wird der vom Browser angeforderte Host an den Downstream-Server gesendet. Genau das Gegenteil von dem, was ich wollte.

Während Nginx kein Äquivalent zu Apache hat ProxyPreserveHost, kann das gleiche Verhalten mit der proxy_set_headerDirektive erreicht werden, und die Lösung von Nginx ist allgemeiner.

Küken
quelle
Sollte sein proxy_set_header Host $http_host;.
Rob
@ Rob, $http_hostexistiert nicht gemäß Nginx-Dokumenten: nginx.org/en/docs/varindex.html
Daniel Serodio
1
@ DanielSerodio Eigentlich existiert es ja, zumindest für 99,99% der Verbindungen. Siehe die Dokumentation . Es unterscheidet sich auch sehr subtil von $host.
Michael Hampton
@ MichaelHampton Ich stehe korrigiert, danke für den Link
Daniel Serodio
1

Ein Arbeitsbeispiel:

  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
quelle
Dies verwendet Nginx.
cod3fr3ak