วิธีการทำให้ nginx เขียน URIs ในเนื้อหาของ HTTP อีกครั้ง?


14

นี่เป็นคำถามที่ตามมาของฉันเกี่ยวกับวิธีการสร้าง 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.pnghttps://domain.com/my/web/app/images/logo.png

ฉันสามารถเข้าใจว่าทำไมสิ่งนี้ถึงเกิดขึ้น แต่มันจะยอดเยี่ยมถ้ามีวิธีในการพร็อกซีเนื้อหาแบบไดนามิกเช่นเดียวกับการร้องขอ มีวิธีรับ nginx เพื่อแปลง URIs ที่ฝังอยู่ในเนื้อหา HTML หรือไม่ เป็นไปได้ที่จะแยกวิเคราะห์และปรับปรุงเนื้อหา HTML แบบไดนามิกเมื่อผ่านพร็อกซีเซิร์ฟเวอร์หรือไม่


2
คุณหาทางออกหรือไม่? ถ้าใช่คุณสามารถโพสต์เป็นคำตอบได้หรือไม่?
Huygens

คำตอบ:


5

ทางออกเดียวของสิ่งนี้ที่ฉันได้พบคือHttpSubsModule (ดูที่หน้า GitHub )

โมดูลไม่ได้เป็นส่วนหนึ่งของแหล่งข้อมูล Nginx อย่างเป็นทางการดังนั้นคุณอาจต้องสร้าง Nginx ด้วยตนเองเพื่อใช้โมดูลนี้

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