เมื่อกำหนดค่า nginx เป็น reverse proxy จะสามารถเขียนส่วนหัวของโฮสต์ไปยังเซิร์ฟเวอร์ดาวน์สตรีมเช่น ProxyPreserveHost ของ Apache ได้หรือไม่?


11

ฉันไม่สามารถหาเทียบเท่าของ ProxyPreserveHost ของ Apache ได้http://httpd.apache.org/docs/2.0/mod/mod_proxy.html#proxypreservehostตัวเลือกใน nginx นี่เป็นสิ่งจำเป็นเพื่อย้อนกลับพร็อกซีไปยังโฮสต์เสมือน

มันทำอะไรแทนชื่อโฮสต์ที่เบราว์เซอร์ระบุด้วยชื่อโฮสต์ของเซิร์ฟเวอร์ดาวน์สตรีม

มันมีอยู่หรือไม่

คำตอบ:


11

ฉันคิดว่าฉันพบวิธีแก้ไขปัญหาแล้ว การส่งโฮสต์ของเซิร์ฟเวอร์ดาวน์สตรีมเป็นพฤติกรรมเริ่มต้นใน nginx และฉันได้เขียนทับมันโดยใช้คำสั่ง:

proxy_set_header Host $host;

ซึ่งส่งโฮสต์ที่เบราว์เซอร์ร้องขอไปยังเซิร์ฟเวอร์ดาวน์สตรีม ตรงข้ามกับสิ่งที่ฉันต้องการ

ดังนั้นในขณะที่ nginx ไม่เทียบเท่ากับ Apache ProxyPreserveHostแต่พฤติกรรมเดียวกันสามารถทำได้ด้วยproxy_set_headerคำสั่งและวิธีการแก้ปัญหาของ nginx นั้นกว้างกว่า


proxy_set_header Host $http_host;ควรจะเป็น
Rob

@Rob $http_hostไม่มีเอกสารตาม Nginx: nginx.org/en/docs/varindex.html
Daniel Serodio

1
@DanielSerodio จริงๆแล้วใช่มันมีอยู่อย่างน้อย 99.99% ของการเชื่อมต่อ ดูเอกสาร $hostนอกจากนี้ยังมีความแตกต่างมากอย่างละเอียดจาก
Michael Hampton

@MichaelHampton ฉันยืนแก้ไขขอบคุณสำหรับการเชื่อมโยง
Daniel Serodio

1

ตัวอย่างการทำงาน:

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

นี่คือการใช้ nginx
cod3fr3ak
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.