Ketika nginx dikonfigurasi sebagai proxy terbalik, dapatkah ia menulis ulang header host ke server hilir seperti ProxyPreserveHost dari Apache?

Jawaban:

11

Saya pikir saya menemukan solusi untuk masalah ini. Mengirim host server downstream adalah perilaku default di nginx, dan saya telah menimpanya dengan menggunakan perintah:

proxy_set_header Host $host;

Yang mengirimkan host yang diminta oleh browser ke server hilir. Justru kebalikan dari apa yang saya inginkan.

Jadi sementara nginx tidak memiliki yang setara dengan Apache ProxyPreserveHost, perilaku yang sama dapat dicapai dengan proxy_set_headerarahan, dan solusi nginx lebih umum.

anak ayam
sumber
Seharusnya proxy_set_header Host $http_host;.
Rob
@Rob, $http_hosttidak ada menurut Nginx docs: nginx.org/en/docs/varindex.html
Daniel Serodio
1
@DanielSerodio Sebenarnya, ya itu ada, setidaknya untuk 99,99% koneksi. Lihat dokumentasi . Ini juga sangat berbeda dari $host.
Michael Hampton
@MichaelHampton Saya berdiri dikoreksi, terima kasih atas tautannya
Daniel Serodio
1

Contoh kerja:

  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
sumber
Ini menggunakan nginx.
cod3fr3ak