ฉันจะรับ nginx เพื่อส่งต่อคำขอ HTTP POST ผ่านการเขียนใหม่ได้อย่างไร


19

แอป iOS ของฉันกำลังเข้าถึงโดเมน A ผ่าน http POST แต่ฉันต้องการส่งต่อคำขอทั้งหมดไปยังโดเมน B

ถ้าฉันใช้ตามปกติrewrite ^/(.*)$ http://mydomain/$1 permanent;ข้อมูล POST ดูเหมือนว่าจะหายไป

ฉันจะส่งข้อมูล HTTP POST ไปยังโดเมนอื่นโดยใช้ NginX ได้อย่างไร

คำตอบ:


32

ลองใช้การสนับสนุนพร็อกซีย้อนกลับแทน ตัวอย่างlocationส่วนจะเป็น:

location / {
  proxy_pass      http://localhost:8080;
  proxy_redirect  http://localhost:8080/ /;
  proxy_read_timeout 60s;

  # May not need or want to set Host. Should default to the above hostname.
  proxy_set_header          Host            $host;
  proxy_set_header          X-Real-IP       $remote_addr;
  proxy_set_header          X-Forwarded-For $proxy_add_x_forwarded_for;
}

ตัวอย่างนี้จะผ่านการร้องขอทั้งหมดนี้บล็อกไปยังเซิร์ฟเวอร์ที่สองทำงานอยู่บนserver localhost:8080สิ่งนี้จะเก็บรักษาPOSTและควรรักษาประเภทคำขออื่น ๆ ด้วยหากเป็นปัญหา

ปัญหาคือการเปลี่ยนเส้นทางภายนอกจะไม่ส่งPOSTข้อมูลอีกครั้ง สิ่งนี้เขียนไว้ในข้อมูลจำเพาะ HTTP (ตรวจสอบหัวข้อ 3xx) ลูกค้าที่ทำเช่นนี้จะละเมิดข้อกำหนด

หากได้รับรหัสสถานะ 301/302 เพื่อตอบสนองต่อคำขอนอกเหนือจาก GET หรือ HEAD ตัวแทนผู้ใช้จะต้องไม่เปลี่ยนเส้นทางคำขอโดยอัตโนมัติเว้นแต่จะได้รับการยืนยันจากผู้ใช้เนื่องจากอาจมีการเปลี่ยนแปลงเงื่อนไขภายใต้คำขอที่ออก .

ฉันค่อนข้างแน่ใจว่าเบราว์เซอร์ส่วนใหญ่ใช้สิ่งนี้โดยบังคับให้คำขอเปลี่ยนเส้นทางเป็นGETคำขอ ตามหลักเหตุผลสเป็คจะอนุญาตให้เบราว์เซอร์ที่จะถามผู้ใช้ว่าจะเปลี่ยนเส้นทางPOSTข้อมูลหรือไม่


awsome! ใช้งานได้อย่างมีเสน่ห์
Jiho Kang

สับสนเล็กน้อยจากความคิดเห็น โดยทั่วไปฉันต้องการตั้งproxy_set_headerค่าหรือไม่? ไม่เช่นนั้นฉันเดาว่าที่อยู่ระยะไกลจะกลายเป็นที่อยู่ระยะไกลของพร็อกซีเซิร์ฟเวอร์ แต่สิ่งที่ฉันมักต้องการคือที่อยู่ระยะไกลของไคลเอนต์ถูกต้องหรือไม่
Georgios Pligoropoulos

ขอบคุณสำหรับคำตอบที่ช่วยฉัน! มีวิธีการตั้งค่า nginx เพื่อให้มันผ่านการร้องขอโพสต์อย่างถูกต้องกลับไปที่ uwsgi แต่มีซ็อกเก็ตแทนการรัน uwsgi ในโหมด http หรือไม่?
เกร็กเจนนิงส์

@GregJennings คำตอบเล็ก ๆ น้อย ๆ แต่จะใช้คำสั่ง 'uwsgi_pass' แทน 'proxy_pass' ในกรณีที่คนอื่นหลงทางโดยมอง ...
Kamilion

1
@Will proxy_redirectใช้สองอาร์กิวเมนต์ ดูเอกสาร: nginx.org/en/docs/http/…
Matthew Scharley
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.