ก่อนอื่นเราควรอ่านเอกสารเกี่ยวกับ proxy_passอย่างละเอียดและครบถ้วน
URI ที่ส่งไปยังเซิร์ฟเวอร์ต้นน้ำจะพิจารณาจากคำสั่ง "proxy_pass" ที่ใช้กับ URI หรือไม่ ต่อท้ายเฉือนใน proxy_pass สั่งหมายความว่า URI /
เป็นปัจจุบันและเท่ากับ การไม่มีเครื่องหมายทับหมายความว่าไม่มี URI ของหมวก
Proxy_pass พร้อม URI :
location /some_dir/ {
proxy_pass http://some_server/;
}
จากข้างต้นมีพร็อกซีดังต่อไปนี้:
http:// your_server/some_dir/ some_subdir/some_file ->
http:// some_server/ some_subdir/some_file
โดยทั่วไป/some_dir/
ได้รับการแทนที่ด้วย/
ที่จะเปลี่ยนเส้นทางการร้องขอจากไป/some_dir/some_subdir/some_file
/some_subdir/some_file
Proxy_pass ที่ไม่มี URI :
location /some_dir/ {
proxy_pass http://some_server;
}
ด้วยเครื่องหมายที่สอง (ไม่มีเครื่องหมายทับ): พร็อกซีจะเป็นดังนี้:
http:// your_server /some_dir/some_subdir/some_file ->
http:// some_server /some_dir/some_subdir/some_file
โดยทั่วไปเส้นทางคำขอดั้งเดิมแบบเต็มจะถูกส่งต่อโดยไม่มีการเปลี่ยนแปลง
ดังนั้นในกรณีของคุณดูเหมือนว่าคุณควรวางเครื่องหมายทับเพื่อให้ได้สิ่งที่คุณต้องการ
ข้อแม้
โปรดทราบว่าการเขียนซ้ำอัตโนมัติจะใช้ได้เฉพาะเมื่อคุณไม่ได้ใช้ตัวแปรใน proxy_pass หากคุณใช้ตัวแปรคุณควรเขียนตัวเองใหม่:
location /some_dir/ {
rewrite /some_dir/(.*) /$1 break;
proxy_pass $upstream_server;
}
มีหลายกรณีที่การเขียนซ้ำใช้ไม่ได้นั่นคือเหตุผลที่ต้องอ่านเอกสารประกอบ
แก้ไข
อ่านคำถามของคุณอีกครั้งดูเหมือนว่าฉันอาจพลาดที่คุณต้องการแก้ไขเอาต์พุต html
ด้วยเหตุนี้คุณสามารถใช้คำสั่งsub_filter สิ่งที่ต้องการ ...
location /admin/ {
proxy_pass http://localhost:8080/;
sub_filter "http://your_server/" "http://your_server/admin/";
sub_filter_once off;
}
โดยทั่วไปสตริงที่คุณต้องการแทนที่และสตริงแทนที่