เปลี่ยนเส้นทางการรับส่งข้อมูล HTTP ทั้งหมดไปยัง HTTPS เมื่อใช้ HTTP (S) Load Balancer ใน Google Compute Engine


18

ฉันมี HTTP / HTTPS Load Balancing ติดตั้งใน Google Compute Engine พร้อมกฎการส่งต่อทั่วโลก 2 ข้อ (HTTP และ HTTPS) แต่ละกฎชี้ไปที่บริการแบ็คเอนด์ที่มีโปรโตคอล HTTP

ฉันต้องการร้องขอทั้งหมดเพื่อที่จะไปhttp://*https://*

ขณะที่การเจรจา balancer โหลดไปยังบริการ back-end ผ่าน HTTP ฉันไม่คิดว่าฉันจะได้รับในการให้บริการ Nginx back-end 301เพื่อส่งกลับ

ฉันได้พยายามโหลปรับแต่งเล็ก ๆ บน Google Compute และพวกเขาสิ้นทุกอย่างขึ้นกับ Google Compute 502กลับ

ฉันแน่ใจว่ามีคนอื่นตั้งค่านี้มาก่อน คำแนะนำหรือคำแนะนำใด ๆ ในทิศทางที่ถูกต้องจะได้รับการชื่นชมอย่างมาก


การเปลี่ยนเส้นทาง HTTP ไปยัง HTTPS (โดยใช้ SSL) ไม่ได้รับการสนับสนุนผ่านตัวโหลดบาลานซ์ HTTP / HTTPS การเปลี่ยนเส้นทางจะต้องกำหนดค่าบนเว็บเซิร์ฟเวอร์ของคุณ (apache, nginx และอื่น ๆ ) จากที่กล่าวมาโปรดอย่าลังเลที่จะส่งคำขอคุณลักษณะนี้ในตัวติดตามปัญหาสาธารณะ Compute Engine ( code.google.com/p/google-compute-engine/issues/list )
Faizan

ขอขอบคุณ; เปิดปัญหา: code.google.com/p/google-compute-engine/issues/…
Ryan Leckey

ตกลงสมบูรณ์แบบฉันได้ส่งคำขอคุณสมบัติไปยังวิศวกรรม
Faizan

@Faizan - มีไทม์ไลน์เมื่อคุณสมบัตินี้ใช้งานได้หรือไม่ ประมาณ 2 ปีแล้วนับตั้งแต่มีการร้องขอสถานที่ วิธีแก้ปัญหาคือ clunky
talonx

ลิงก์ใหม่สำหรับคำขอนี้คือissuetracker.google.com/issues/35904733 (แม้ว่าจะยังคงมีการเปลี่ยนเส้นทางเก่า)
Daniel Compton

คำตอบ:


19

เรามีการตั้งค่าที่คล้ายกันโดยใช้ตัวโหลดบาลานซ์ HTTP / HTTPS และเราพยายามบังคับใช้ HTTPS ไม่สามารถทำได้โดยตรงจากตัวโหลดบาลานซ์ แต่คุณสามารถตั้งค่าได้จากบริการแบ็คเอนด์ของคุณ ตัวโหลดบาลานซ์ของ Google Cloud จะตั้งค่าส่วนหัว X-Forwarded-Proto http ด้วยค่า http หรือ https คุณตรวจสอบส่วนหัวนี้ในบริการแบ็กเอนด์ของคุณ (ในกรณีของเราวานิช แต่สิ่งนี้สามารถทำได้ใน Nginx) และถ้าค่าเป็น http คุณจะส่ง 301 กลับไป


8
ขอบคุณ! เพื่อลูกหลาน: if ($http_x_forwarded_proto = "http") { return 301 https://$host$request_uri; }
Ryan Leckey

คุณควรใช้426ส่วนหัวอัปเกรดHTTP มากกว่า 301 อ่านเพิ่มเติม: stackoverflow.com/questions/17873247/…
Vikram Tiwari

3
ฉันไม่เห็นด้วยกับ Vikram คุณต้องใช้ 301 เพื่อวัตถุประสงค์ SEO หากคุณส่งคืนรหัสตระกูล 4xx อันดับของคุณจะไม่ไหลจากลิงก์ที่ชี้ไปยัง http เก่าไปยัง https 301 คือรหัสที่คาดว่าอย่างน้อยที่สุดถ้าคุณใส่ใจกับ SEO ในเว็บไซต์ของคุณ
cyrrill

1
@VikramTiwari คำตอบโพสต์ระบุว่า: "มันไม่ได้เกี่ยวกับการอัพเกรดจาก http: // เป็น https: // at all"
Rambatino

1

ฉันประสบปัญหานี้ในวันนี้และสามารถแก้ไขได้โดยใช้ TCP load balancing หากคุณไม่ต้องการตัวเลือก load balancer เฉพาะ HTTP / HTTPS คุณอาจใช้ TCP load balancer (ไม่มี SSL) เพื่อรับปริมาณการรับส่งข้อมูลไปยังทั้งพอร์ต 80 และ 443 สำหรับการรับส่งข้อมูลจากพอร์ต 80 คุณสามารถส่ง 301 ได้


1
ไม่อนุญาตให้ใช้ tcp load balancing สำหรับพอร์ต 80 doc > TCP Proxy Load Balancing รองรับพอร์ตต่อไปนี้: 25, 43, 110, 143, 195, 443, 465, 587, 700, 993, 995, 1883, 5222
Giovanni Toraldo
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.