ฉันไม่ใช่ผู้เชี่ยวชาญรายใหญ่ในการดูแลระบบ nginx ฉันเป็นเพียงนักพัฒนา ฉันมีสองแบ็กเอนด์ทำงานในนักเทียบท่า ให้ฉันตั้งชื่อพวกเขา
- แบ็กเอนด์ 1:8080
- แบ็กเอนด์ 2:8081
นอกจากนี้ฉันยังมี Nginx ที่เปิดเผยพอร์ต 443 พร้อมติดตั้งใบรับรอง letsencrypt การกำหนดค่า Nginx ของฉันคือ (ตัวแปร env FQDN เป็นเหมือน example.com)
แบ็กเอนด์ต้นน้ำ 1 {
เซิร์ฟเวอร์แบ็กเอนด์ 1:8080;
}
แบ็กเอนด์ต้นน้ำ 2 {
เซิร์ฟเวอร์แบ็กเอนด์ 2:8081;
}
เซิร์ฟเวอร์ {
ฟัง 443 ssl;
ชื่อเซิร์ฟเวอร์ ${FQDN} www.${FQDN};
ssl_certificate /etc/letsencrypt/live/${FQDN}/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/${FQDN}/privkey.pem;
ssl_session_cache ที่แชร์:SSL:1m;
ssl_session_timeout 5 นาที;
ssl_ciphers สูง:!aNULL:!MD5;
เปิด ssl_prefer_server_ciphers;
ถ้า ($server_port = 80) { ตั้ง $https_redirect 1; }
ถ้า ($host ~ '^www\.') { ตั้ง $https_redirect 1; }
ถ้า ($https_redirect = 1) { ส่งคืน 301 https://${FQDN}$request_uri; }
ตำแหน่ง /path1/ {
proxy_pass http://backend1/;
proxy_redirect ~^/(.*) $scheme://$http_host/path1/$1;
proxy_http_version 1.1;
proxy_pass_header Set-Cookie;
คุกกี้ proxy_pass_header;
proxy_pass_header X-ส่งต่อ-สำหรับ;
proxy_set_header อัพเกรด $http_upgrade;
proxy_set_header การเชื่อมต่อ "อัพเกรด";
proxy_set_header โฮสต์ $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forward-สำหรับ $proxy_add_x_forwarded_for;
proxy_set_header X-Forward-Proto http;
proxy_set_header X-Nginx-Proxy จริง;
add_header X-อัปสตรีม $upstream_addr;
}
ตำแหน่ง /path2/ {
proxy_pass http://backend2/;
proxy_redirect ~^/(.*) $scheme://$http_host/path2/$1;
proxy_http_version 1.1;
proxy_pass_header Set-Cookie;
คุกกี้ proxy_pass_header;
proxy_pass_header X-ส่งต่อ-สำหรับ;
proxy_set_header อัพเกรด $http_upgrade;
proxy_set_header การเชื่อมต่อ "อัพเกรด";
proxy_set_header โฮสต์ $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forward-สำหรับ $proxy_add_x_forwarded_for;
proxy_set_header X-Forward-Proto http;
proxy_set_header X-Nginx-Proxy จริง;
add_header X-อัปสตรีม $upstream_addr;
}
}
ฉันต้องการสิ่งนั้นถ้าฉันขอ https://exapmle.com/path1/
จากนั้น Nginx ควรไปที่ http://backend1:8080/
และตอบกลับฉันจากเซิร์ฟเวอร์นั้น ปัญหาคือ backend1 (เช่นเดียวกับ backend2) สามารถตอบสนองด้วย 302 และเปลี่ยนเส้นทางไปยังบางเส้นทางเช่น /เข้าสู่ระบบ
. Nginx เปลี่ยนเส้นทางเบราว์เซอร์ของฉันไปที่ https://exapmle.com/login
แต่ฉันต้องการให้มันเปลี่ยนเส้นทางฉันไปที่ https://exapmle.com/path1/login
คุณช่วยฉันหน่อยได้ไหมและชี้ไปที่ข้อผิดพลาดที่ฉันทำในการกำหนดค่าของฉัน ฉันได้ตรวจสอบคำถามที่คล้ายกันทั้งหมดใน SO แล้วและไม่พบวิธีแก้ปัญหาใด ๆ ฉันยังได้สำรวจเอกสารประกอบของ Nginx และยังไม่พบคำตอบ
ฉันมีสาย proxy_redirect ~^/(.*) $scheme://$http_host/path1/$1;
และฉันคิดว่ามันจะต้องทำงานที่ฉันต้องการ
BTW ฉันไม่สามารถครอบครอง / ตำแหน่ง (สร้างการกำหนดค่าสำหรับเส้นทางรูท) ในการกำหนดค่า Nginx ของฉันเนื่องจากสงวนไว้สำหรับเซิร์ฟเวอร์แบ็กเอนด์อื่น
ขอบคุณล่วงหน้า.