เอกสาร nginx อธิบายพฤติกรรม:
หากมีการระบุคำสั่ง proxy_pass ด้วย URI เมื่อคำขอถูกส่งไปยังเซิร์ฟเวอร์ ส่วนของ URI คำขอที่ปรับให้เป็นมาตรฐานซึ่งตรงกับตำแหน่งจะถูกแทนที่ด้วย URI ที่ระบุในคำสั่ง:
ในกรณีของคุณ หมายความว่า URI คำขอถูกแทนที่ด้วย /api/v1/
URI ที่ระบุในของคุณ proxy_pass
คำสั่ง
หากคุณต้องการให้ URI ส่งผ่านตามที่เป็นอยู่ คุณต้องทำ:
ตำแหน่ง /api/v1/ {
proxy_pass http://frontend-api.preprod.example.com;
}
ในกรณีนี้ nginx ใช้ URI จากคำขอดั้งเดิมกับ proxy_pass
ปลายทางตามที่อธิบายโดย:
หากระบุ proxy_pass โดยไม่มี URI URI คำขอจะถูกส่งผ่านไปยังเซิร์ฟเวอร์ในรูปแบบเดียวกับที่ส่งโดยไคลเอนต์เมื่อคำขอดั้งเดิมถูกประมวลผล หรือ URI คำขอที่ปรับมาตรฐานทั้งหมดจะถูกส่งผ่านเมื่อประมวลผล URI ที่เปลี่ยนแปลง:
หากคุณต้องการแทนที่ส่วนหนึ่งของ URI คำขอด้วยส่วนอื่น คุณต้องใช้การจับภาพนิพจน์ทั่วไป:
ตำแหน่ง ~ ^/แหล่งที่มา/เส้นทาง/(.*) {
proxy_pass http://example.com/destination/path/$1;
}
แก้ไข:
ในการรับชื่อโดเมนของคำขอเดิมที่ส่งไปยังอัพสตรีม จำเป็นต้องตั้งค่า เจ้าภาพ
ส่วนหัว HTTP สำหรับคำขออัปสตรีม:
proxy_set_header โฮสต์ $host;
การส่งที่อยู่ IP ของผู้เข้าชมผ่านส่วนหัวมักจะมีประโยชน์:
proxy_set_header X-ส่งต่อ-สำหรับ $remote_addr;