Gdy nginx jest skonfigurowany jako zwrotny serwer proxy, czy może przepisać nagłówek hosta na serwer niższego rzędu, taki jak ProxyPreserveHost Apache?

Odpowiedzi:

11

Myślę, że znalazłem rozwiązanie problemu. Wysłanie hosta serwera podrzędnego jest domyślnym zachowaniem w nginx, a ja przesłoniłem go za pomocą dyrektywy:

proxy_set_header Host $host;

Który wysyła host żądany przez przeglądarkę do dalszego serwera. Dokładnie odwrotnie niż chciałem.

Tak więc chociaż nginx nie ma odpowiednika Apache ProxyPreserveHost, to samo zachowanie można osiągnąć dzięki proxy_set_headerdyrektywie, a rozwiązanie nginx jest bardziej ogólne.

pisklęta
źródło
Powinno być proxy_set_header Host $http_host;.
Rob
@Rob, $http_hostnie istnieje zgodnie z dokumentami Nginx: nginx.org/en/docs/varindex.html
Daniel Serodio
1
@DanielSerodio Właściwie tak, istnieje, przynajmniej dla 99,99% połączeń. Zobacz dokumentację . Różni się również bardzo subtelnie $host.
Michael Hampton
@MichaelHampton Stoję poprawiony, dzięki za link
Daniel Serodio
1

Przykład roboczy:

  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
źródło
To używa nginx.
cod3fr3ak