นี่เป็นคำถามที่ตามมาของฉันเกี่ยวกับวิธีการสร้าง nginx reverse proxy 302 เปลี่ยนเส้นทางไปยังโฟลเดอร์ย่อย URI แทนที่จะเป็นรูท
ฉันมีพร็อกซีเซิร์ฟเวอร์ Nginx ที่ใช้rewrite
และproxy_pass
สั่งการร้องขอภายนอกพร็อกซี่ไปยัง URL เช่นhttps://domain.com/my/web/app/
ไปยังเซิร์ฟเวอร์ LAN https://10.0.0.22/
ภายในที่ นี่คือความพยายามของฉันที่จะเป็นตัวแทนของการแปลใน ASCII UML:
.-------------. .------------------.
| Nginx proxy | | Local web server |
| (domain.com) | | (10.0.0.22) |
'-------------' '------------------'
| |
| |
GET https://domain.com/my/web/app/ ----------->| |
|---------------->| GET /
| |
|<----------------| 302 redirect /login.php
302 redirect /my/web/app/login.php <-----------| |
| |
GET https://domain.com/my/web/app/login.php -->| |
|---------------->| GET /login.php
| |
|<----------------| 200
HTML body content (images, CSS, links) <-------|
นี่คือบล็อกตำแหน่งจริงในไฟล์กำหนดค่า nginx ของฉัน:
location ^~ /my/web/app/
{
proxy_buffering off;
rewrite /my/web/app/(.*) /$1 break;
proxy_pass https://10.0.0.22/;
proxy_redirect default;
}
มันใช้งานได้ดีสำหรับการแปล URI ระหว่างเส้นทาง URI ภายในและภายนอกสำหรับคำขอ HTTP และการตอบกลับ แต่ URIs ใด ๆ ในเนื้อหา HTML (ภาพร่างกาย, CSS, สคริปต์) จะไม่ถูกแปล
ยกตัวอย่างเช่นภาพที่มีทางญาติที่ฝังตัวในการตอบสนอง HTML ให้กับยูริเหมือน /images/logo.png จะถูกส่งกลับไปยังลูกค้าเว็บและตีความว่าเป็นแทนhttps://domain.com/images/logo.png
https://domain.com/my/web/app/images/logo.png
ฉันสามารถเข้าใจว่าทำไมสิ่งนี้ถึงเกิดขึ้น แต่มันจะยอดเยี่ยมถ้ามีวิธีในการพร็อกซีเนื้อหาแบบไดนามิกเช่นเดียวกับการร้องขอ มีวิธีรับ nginx เพื่อแปลง URIs ที่ฝังอยู่ในเนื้อหา HTML หรือไม่ เป็นไปได้ที่จะแยกวิเคราะห์และปรับปรุงเนื้อหา HTML แบบไดนามิกเมื่อผ่านพร็อกซีเซิร์ฟเวอร์หรือไม่