แก้ไขหน้า HTML ที่ส่งคืนโดยพร็อกซีย้อนกลับ nginx


17

ฉันมีการตั้งค่าพร็อกซีย้อนกลับสำหรับการเข้าถึงแอปพลิเคชันบุคคลที่สามที่อยู่ภายในอินทราเน็ตจากอินเทอร์เน็ต สมมติว่าแอปพลิเคชันนี้อยู่ใน URL:

https://internalserver:8080/ (เข้าถึงได้จากอินทราเน็ตเท่านั้น)

และพร็อกซีเปิดอยู่:

https://proxyserver/ (เข้าถึงได้จากทุกที่ในโลก)

พรอกซีได้รับการจัดการโดย nginx และใช้งานได้ เมื่อผู้ใช้เข้าถึงhttps://proxyserver/ พวกเขาได้รับเนื้อหาของ app https://internalserver:8080/ที่

ปัญหาคือว่าการประยุกต์ใช้คือการเขียน URL ที่สมบูรณ์ในการตอบสนองของ HTML ดังนั้นเมื่อผู้ใช้คลิกลิงก์ไปยังหน้าใหม่เบราว์เซอร์ที่มีการพยายามที่จะหาหน้าเว็บที่มีชื่อภายในของตนเช่น แทนhttps://internalserver:8080/somepage https://proxyserver/somepage

ฉันรู้ว่านี่เป็นข้อบกพร่องของโปรแกรม แต่ฉันไม่สามารถแก้ไขโปรแกรมได้

ฉันสามารถสกัดกั้นการตอบสนองแก้ไข URL และส่ง (แก้ไข) ไปยังไคลเอนต์สุดท้ายด้วย nginx ได้หรือไม่ หรืออาจจะด้วยเครื่องมืออื่น?

แก้ไข:ฉันเห็นคำถามนี้มาก่อน แต่กรณีของฉันเฉพาะเจาะจงมากขึ้นคำถามที่ยกมาขอให้แก้ไขโดยทั่วไป ในกรณีนั้นโปรแกรม ad-cgi ที่รวดเร็วเป็นทางออกที่ดีที่สุดสิ่งที่ฉันต้องการคือโซลูชันที่เฉพาะเจาะจงมากขึ้นสำหรับ (ฉันคิดว่า) เป็นสถานการณ์ที่พบบ่อยมากขึ้น ในขณะที่โปรแกรม cgi ที่รวดเร็วสามารถทำงานได้ฉันกำลังมองหาสิ่งที่ง่ายที่สุดและแข็งแกร่งขึ้นและอาจพิสูจน์ได้ในโลกแห่งความเป็นจริงทางออกสำหรับสถานการณ์นี้


คำตอบ:


16

นี่คือวิดีโอ Nginx อย่างเป็นทางการบน YouTube ซึ่งแสดงให้เห็นถึงการเขียนเนื้อหาแบบอินไลน์

https://youtu.be/7Y7ORypoHhE?t=20m22s

อันที่จริงด้วย sub_filter

http://nginx.org/en/docs/http/ngx_http_sub_module.html

ในกรณีของคุณคุณกำลังมองหาสิ่งที่ชอบ:

location / {
sub_filter_once off;
sub_filter_types text/html;
sub_filter "https://internalserver:8080" "https://proxyserver";
}

3

http://nginx.org/en/docs/http/ngx_http_sub_module.html

โมดูล ngx_http_sub_module เป็นตัวกรองที่ปรับเปลี่ยนการตอบสนองโดยการแทนที่หนึ่งสายอักขระที่ระบุโดยอื่น

โมดูลนี้ไม่ได้ถูกสร้างขึ้นตามค่าเริ่มต้นควรเปิดใช้งานด้วย --with-http_sub_module พารามิเตอร์การกำหนดค่า

ตัวอย่างการกำหนดค่า

sub_filter      </head>
    '</head><script language="javascript" src="$script"></script>';
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.