ฉันรู้ว่ามีการโพสต์มากมายเกี่ยวกับ nginx + rewrite แต่ฉันมีกรณีที่ไม่สามารถทำให้มันทำงานได้อย่างถูกต้อง
ฉันมีแอปกระติกน้ำหลายตัวที่เทียบท่าแล้ว ขอตั้งชื่อมันว่า: vm1
,vm2
,vm3
...vm6
ฉันมีโดเมน:
manager.mydomain.com
สิ่งที่ฉันต้องการบรรลุ:
เมื่อผู้ใช้นำทางไปยัง
https://manager.mydomain.com/vm6
ถูกเปลี่ยนเส้นทางเช่นไปที่
https://manager.mydomain.com/vm6/login
(และปลายทางอื่น ๆ /admin ....)
ดังนั้นการพูดโดยทั่วไปที่ครอบคลุม https://manager.mydomain.com/vm6/(.*)
ถูกเปลี่ยนเส้นทางไปยังแอปขวด
น่าเสียดายที่มีลิงค์ที่จะต้องเขียนใหม่เช่นกัน
การทดลองใช้งานปัจจุบันของฉัน:
http {
ผู้จัดการต้นน้ำ vm4 {
little_conn;
เซิร์ฟเวอร์ X.X.X.X:5004;
}
ผู้จัดการต้นน้ำ vm6 {
little_conn;
เซิร์ฟเวอร์ Y.Y.Y.Y:5006;
}
เซิร์ฟเวอร์ {
server_name manager.mydomain.com;
ฟัง 443 ssl;
ssl_certificate /etc/letsencrypt/live/manager.mydomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/manager.mydomain.com/privkey.pem;
access_log /var/log/nginx/dtmanager.access.log;
error_log /var/log/nginx/dtmanager.error.log;
log_subrequest บน;
ตำแหน่ง /vm6 {
เขียนใหม่ ^/vm6$ https://manager.mydomain.com/vm6/ ถาวร;
}
ตำแหน่ง /vm6/ {
#rewrite /vm6/(.*) /vm6/$1 ตัวแตก;
sub_filter '"/' '"/vm6/';
sub_filter_once ปิด;
proxy_pass http://managervm6/;
#proxy_redirect ปิด;
proxy_set_header โฮสต์ $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-ส่งต่อ-สำหรับ $proxy_add_x_forwarded_for;
proxy_set_header X-ส่งต่อโปรโต https;
}
}
เมื่อฉันนำทาง
ขด -i https://manager.mydomain.com/vm6/admin
ฉันได้รับคำตอบ:
เซิร์ฟเวอร์: nginx/1.13.9
วันที่: วันศุกร์ที่ 02 กรกฎาคม 2021 09:14:40 GMT
ประเภทเนื้อหา: text/html; ชุดอักขระ=utf-8
การเข้ารหัสการถ่ายโอน: chunked
การเชื่อมต่อ: มีชีวิตอยู่
ที่ตั้ง: http://manager.mydomain.com/admin/
แต่ถ้าฉันไปที่
ขด -i https://manager.mydomain.com/vm6/login
ฉันได้รับการตอบกลับที่ถูกต้อง แต่การเข้าสู่ระบบใช้งานไม่ได้ (ฉันเดาว่ามีบางอย่างผิดปกติกับการเปลี่ยนเส้นทาง)
ผมทำอะไรผิดหรือเปล่า?
ขอบคุณ!