สั้น:
ฉันมีเซิร์ฟเวอร์ที่แตกต่างกันสองเซิร์ฟเวอร์ที่อยู่เบื้องหลังพร็อกซี nginx เมื่อฉันพยายามเข้าถึงหนึ่งในนั้น ฉันจะถูกเปลี่ยนเส้นทางไปยังอีกอันหนึ่งซึ่งอยู่ที่ตำแหน่งรูทเสมอ สิ่งนี้เกิดขึ้นครั้งเดียว บันทึกบอกเป็นนัยว่า Firefox/Chrome ไม่ส่งคำขอ GET ไปยัง nginx เมื่อฉันป้อนที่อยู่ในครั้งแรก เมื่อฉันป้อน URL เป็นครั้งที่สองในเซสชัน Firefox/Chrome ฉันจะไปถึงเซิร์ฟเวอร์ที่ถูกต้อง
อีกต่อไป:
ในการตั้งค่าของฉัน ฉันมีเซิร์ฟเวอร์สองเครื่องภายในเครือข่ายนักเทียบท่าซึ่งควรกำหนดเส้นทาง "https://server.app/" ไปที่ "http://docker-server-1:80" และ "https://server.app/client " ควรส่งผ่านไปยัง "http://docker-server-2:8090/client"
การกำหนดค่า nginx ของฉันมีลักษณะดังนี้
เหตุการณ์ {}
http {
เซิร์ฟเวอร์ {
server_name server.app;
ฟัง 443 ssl;
ssl_certificate /etc/nginx/fullchain.pem;
ssl_certificate_key /etc/nginx/privkey.pem;
error_log /etc/nginx/nginx.log ดีบัก;
ตำแหน่ง / ลูกค้า {
proxy_pass http://docker-server-2:8090/client;
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-Forwarded-Proto $scheme;
}
ที่ตั้ง / {
proxy_pass http://docker-server-1:80;
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-Forwarded-Proto $scheme;
}
}
}
เมื่อฉันป้อน "https://server.app/client" ฉันจะเข้าถึงเซิร์ฟเวอร์ที่ถูกต้องเมื่อ ก) ฉันเปิดหน้านี้ในโหมดไม่ระบุตัวตนของ Firefox/Chrome ข) ฉันใช้เครื่องมือที่เรียบง่ายและไร้เดียงสาอย่าง curl/wget, c ) ฉันล้างแคชของ Firefox/Chrome และพวกเขาไม่เคยเห็น "https://server.app" มาก่อน หรือ ง) ฉันต่อท้าย index.html แล้วป้อน "https://server.app/client/index.html"
เมื่อฉันไปที่ "https://server.app" และพยายามเปิด "https://server.app/client" ในภายหลัง หน้า "https://server.app" จะถูกโหลดแทนหนึ่งครั้งต่อเซสชันเบราว์เซอร์ เมื่อฉันป้อน URL ไดเรกทอรีย่อยเป็นครั้งที่สอง ฉันจะเข้าถึงเซิร์ฟเวอร์ที่ถูกต้องจนกว่าฉันจะปิดเบราว์เซอร์และเปิดใหม่อีกครั้ง จากนั้นฉันจะสิ้นสุดอีกครั้งที่ "https://server.app" เมื่อฉันป้อน "https://server.app/client"
ส่วนที่แปลกคือฉันไม่เห็นคำขอ GET ใด ๆ ในบันทึก nginx เมื่อป้อน "https://server.app/client" ด้วย Firefox/Chrome ที่ไม่ระบุตัวตน ดูเหมือนว่าทั้งสองเบราว์เซอร์จะใช้เวอร์ชันแคชของ "https://server.app" เมื่อฉันป้อน "https://server.app/client" แต่ฉันไม่เข้าใจว่าทำไม นี่คือเหตุผลที่ฉันคิดว่าเบราว์เซอร์เป็นส่วนหนึ่งของปัญหา แต่ฉันจะบอกให้พวกเขาไม่ทำการเปลี่ยนเส้นทางนี้ได้อย่างไร