ฉันมีคำถามมากมายเกี่ยวกับ ssl เซสชันท้องถิ่นและ load balancing ซึ่งดูเหมือนจะเชื่อมโยงกันดังนั้นฉันต้องขออภัยล่วงหน้าสำหรับคำถามนี้
ฉันมีเว็บไซต์ที่ใช้ไฟล์เป็นครั้งคราว ลักษณะของเว็บไซต์คือส่วนใหญ่เป็น http แต่บางส่วนเป็น ssl ปัจจุบันเนื่องจากเซสชันที่ใช้ไฟล์เป็นสิ่งจำเป็นสำหรับการร้องขอ ssl ใด ๆ ที่จะเข้าชมเซิร์ฟเวอร์เดียวกันกับการร้องขอ http ก่อนหน้านี้
เนื่องจากข้อ จำกัด ด้านเวลาฉันต้องการทำสิ่งที่ง่ายที่สุดที่เป็นไปได้ในการโหลดบาลานซ์ที่เพิ่มการรับส่งข้อมูล http และ ssl
ดูเหมือนจะมี 2 ตัวเลือกสำหรับอัลกอริทึมการปรับสมดุลภาระแบบเหนียว:
- ตาม IP
- ตามคุกกี้
โซลูชันที่อิงกับ IP อาจใช้งานได้ แต่อัลกอริทึมการแฮชอาจเปลี่ยนเซิร์ฟเวอร์ที่ผู้ใช้ไปเมื่อเซิร์ฟเวอร์หยุดทำงานหรือถูกเพิ่มซึ่งไม่พึงประสงค์กับการตั้งค่าเซสชันที่อิงกับไฟล์ปัจจุบัน ฉันคิดว่ามันเป็นไปได้ในทางเทคนิคสำหรับผู้ใช้ในการเปลี่ยน ips ที่ถูกต้องในขณะที่เรียกดูเว็บไซต์
อัลกอริทึมที่ใช้คุกกี้ดูเหมือนจะดีกว่า แต่การไม่สามารถตรวจสอบคุกกี้เมื่อเข้ารหัสโดย ssl ดูเหมือนจะนำเสนอปัญหาของตัวเอง
ฉัน googling สำหรับตัวอย่างเกี่ยวกับวิธีการโหลด ssl และฉันไม่สามารถหาตัวอย่างที่ชัดเจนของการตั้งค่าที่สามารถทำโหลดบาลานซ์ตามคุกกี้และสามารถจัดการกับโหลด ssl ที่เพิ่มขึ้นได้โดยการเพิ่ม ssl ตัวถอดรหัสอีกตัว
ตัวอย่างที่ชัดเจนที่สุดที่ฉันเคยเห็นมีตัวถอดรหัส ssl (โดยทั่วไปคือฮาร์ดแวร์, apache_mod_ssl หรือ nginx) ที่อยู่ระหว่างเบราว์เซอร์ไคลเอ็นต์และตัวโหลดบาลานซ์ ตัวอย่างมักจะมีลักษณะดังนี้ (แก้ไขจากhttp://haproxy.1wt.eu/download/1.3/doc/architecture.txt ):
192.168.1.1 192.168.1.11-192.168.1.14 ------- + ----------- + ----- + ----- + ----- + | | | | | + - + - + + - + - + - - + - + - - + - + - + - + - | LB1 | | A | | B | | C | | D | + ----- + + --- + + --- + + --- + + --- apache 4 เว็บเซิร์ฟเวอร์ราคาถูก mod_ssl haproxy
ส่วนการถอดรหัส ssl ในตัวอย่างด้านบนดูเหมือนว่าจะเป็นคอขวดที่อาจไม่สามารถปรับขนาดได้ในแนวนอน
ฉันได้ดู haproxy และดูเหมือนว่าจะมีตัวเลือก 'mode tcp' ที่จะอนุญาตสิ่งนี้ซึ่งจะช่วยให้คุณมีตัวถอดรหัส ssl หลายตัว:
haproxy | ------------- | | ssl-decoder-1 ssl-decoder2 | | ------------------- | | | web1 web2 web3
อย่างไรก็ตามในการตั้งค่าดังกล่าวจะปรากฏว่าคุณสูญเสีย IP ของไคลเอ็นต์เนื่องจาก haproxy ไม่ได้ถอดรหัส ssl: https://cloud-support.engineyard.com/discussions/problems/335-haproxy-not-passing-x-forwarded -สำหรับ
ฉันดู nginx ด้วยและฉันก็ไม่เห็นตัวอย่างชัดเจนของ ssl-decoders ที่ปรับขนาดได้ในแนวนอน ดูเหมือนจะมีตัวอย่างมากมายของคนที่มี nginx เป็นคอขวดที่มีศักยภาพ และอย่างน้อยลิงค์นี้แนะนำว่า nginx ไม่มีตัวเลือกในการตั้งค่าเหมือน haproxy ที่คุณจะสูญเสีย ip โดยบอกว่า nginx "ไม่สนับสนุนการส่งผ่านการเชื่อมต่อ TCP ไปยังแบ็กเอนด์อย่างโปร่งใส" วิธีการส่ง Apache การรับส่งข้อมูลผ่าน SSL พร็อกซี nginx .
คำถาม:
- ทำไมดูเหมือนไม่มีตัวอย่างเพิ่มเติมของการตั้งค่าที่เพิ่มตัวถอดรหัส ssl เพิ่มเติมเพื่อจัดการกับปริมาณการใช้ที่เพิ่มขึ้น
- เป็นเพราะขั้นตอนการถอดรหัส ssl เป็นเพียงคอขวดในเชิงทฤษฎีและในทางปฏิบัติจริง ๆ แล้วตัวถอดรหัสหนึ่งตัวจะเพียงพอแล้วยกเว้นไซต์ที่มีปริมาณการใช้งานที่ไร้สาระ?
- วิธีแก้ปัญหาที่เป็นไปได้อีกอย่างหนึ่งที่นึกถึงคือบางทีใครก็ตามที่มีความต้องการ SSL ที่เพิ่มขึ้นเช่นนั้นก็จะมีเซสชั่นสโตร์แบบรวมศูนย์ดังนั้นจึงไม่สำคัญว่าเว็บเซิร์ฟเวอร์ใดที่ไคลเอนต์จะพบลูกค้า จากนั้นคุณสามารถเปิดใช้งาน mod_ssl หรือเทียบเท่าในทุกเว็บเซิร์ฟเวอร์
- โซลูชัน haproxy ที่อ้างถึงข้างต้นดูเหมือนว่าจะทำงานได้ (นอกเหนือจากปัญหา IP ของไคลเอ็นต์) แต่มีใครบางคนที่พบโซลูชันการโหลดบาลานเซอร์ซอฟต์แวร์ที่ทำงานด้วยการใช้คุกกี้เหนียว ๆ ซึ่งจะทำงานโดยการเพิ่มจำนวนเครื่องถอดรหัสในขณะที่รักษา IP ไคลเอนต์ เป็นไปได้ (เนื่องจากคุณต้องถอดรหัสคำขอเพื่อรับ IP ของไคลเอ็นต์ซึ่งในกรณีนี้เรามีคอขวดตัวถอดรหัส)
สมมติว่าทุกสิ่งที่ฉันพูดเป็นจริงสิ่งเหล่านี้ดูเหมือนจะเป็นตัวเลือกของฉัน:
- ใช้ ip hashing (ไม่ดีสำหรับผู้ใช้ที่อาจเปลี่ยน ips อย่างถูกกฎหมายและสำหรับการเพิ่มและการปล่อยเซิร์ฟเวอร์)
- ใช้ nginx หรือ mod_ssl เป็นโปรแกรมที่ 1 แตะที่คำขอ ssl นี่จะเป็นคอขวดการถอดรหัส ssl ที่เป็นไปได้
- ใช้ haproxy เป็นโปรแกรมที่ 1 แตะที่การร้องขอ ssl, เพิ่มความสามารถในการขยาย ssl ในแนวนอน, แต่ใช้งานได้โดยไม่มี ips ที่บันทึกไว้ที่ระดับเว็บเซิร์ฟเวอร์สำหรับการร้องขอ ssl (อาจจะเป็นการชั่วคราว)
- ในระยะยาวให้ย้ายไปที่เซสชั่นมือถือหรือส่วนกลางทำให้เซสชันไม่จำเป็น