ขณะนี้ฉันมี ELB ให้บริการทั้งhttp://www.example.orgและhttps://www.example.org
ผมอยากจะตั้งขึ้นเพื่อชี้คำขอใด ๆ ที่จะhttp://www.example.orgคือการเปลี่ยนเส้นทางไปhttps://www.example.org
ELB ส่งคำขอ https เป็นคำขอ http ดังนั้นการใช้:
server {
listen 80;
server_name www.example.org;
rewrite ^ https://$server_name$request_uri? permanent;
}
จะไม่ทำงานเนื่องจากคำขอที่ส่งไปยังhttps://www.example.orgจะยังคงถูกส่งไปยังพอร์ต 80 บน nginx
ฉันรู้ว่าเป็นไปได้ที่จะเขียนใหม่เป็น
server {
listen 80;
server_name www.example.org;
if ($http_x_forwarded_proto != "https") {
rewrite ^(.*)$ https://$server_name$1 permanent;
}
}
แต่ทุกสิ่งที่ฉันได้อ่านบอกว่าif
ควรหลีกเลี่ยงค่าใช้จ่ายทั้งหมดภายในการกำหนดค่า nginx และนี่จะเป็นสำหรับทุกคำขอเดียว นอกจากนี้ยังหมายความว่าฉันต้องตั้งค่าการแยกต่างหากเป็นพิเศษสำหรับการตรวจสุขภาพ ( ดังที่อธิบายไว้ที่นี่ : "... เมื่อคุณอยู่หลัง ELB โดยที่ ELB ทำหน้าที่เป็นจุดสิ้นสุด HTTPS และส่งทราฟฟิก HTTP ไปยังเซิร์ฟเวอร์ของคุณเท่านั้น ทำลายความสามารถในการตอบสนองด้วยการตอบสนอง HTTP 200 OK สำหรับการตรวจสุขภาพที่ ELB ต้องการ ")
ฉันกำลังพิจารณาที่จะทำการล็อกอินในรหัสของเว็บแอปพลิเคชันมากกว่าการกำหนดค่า nginx (และสำหรับวัตถุประสงค์ของคำถามนี้สมมติว่ามันเป็นแอพพลิเคชั่นที่ใช้ Django) แต่ฉันไม่แน่ใจว่ามันจะเหนือกว่าif
ในการกำหนดค่า