ฉันมีเซิร์ฟเวอร์ websocket node.js ที่ทำงานบนอินสแตนซ์ EC2 บนพอร์ต 8080 การเชื่อมต่อ websocket ปกติ (ws://
) ทำงานได้ดี แต่เมื่อฉันพยายามทำการเชื่อมต่อที่ปลอดภัย (wss://
) การเชื่อมต่อเว็บซ็อกเก็ตล้มเหลว
ฉันทราบว่าคำขอ wss ถูกส่งไปยังพอร์ต 443 ดังนั้นฉันจึงใช้ ALB เพื่อส่งต่อคำขอบนพอร์ต 443 ไปยังพอร์ต 8080 เนื่องจากฉันยังใหม่กับ AWS ฉันจึงไม่รู้ว่าฉันทำถูกต้องหรือไม่ นี่คือสิ่งที่ฉันทำ
- เซิร์ฟเวอร์ Node.js กำลังฟังพอร์ต 8080 ในอินสแตนซ์ EC2
- นี่คือกฎความปลอดภัยขาเข้าสำหรับอินสแตนซ์ EC2 นั้น
กฎความปลอดภัยขาเข้า
- ตัวจัดสรรภาระงานแอปพลิเคชันพร้อมผู้ฟัง
HTTPS: 443
มันส่งต่อไปยังอินสแตนซ์ EC2 ของฉันบนพอร์ต 8080 โดยใช้โปรโตคอล HTTPS ฉันได้แนบใบรับรอง SSL กับ ALB ด้วย
ฉันไม่สามารถเข้าใจสิ่งที่ฉันทำผิด ความช่วยเหลือใด ๆ ที่ชื่นชม
อัปเดต:
- ฉันได้สร้างกลุ่มความปลอดภัยสองกลุ่ม (ec2-sg และ alb-sg) และกำหนดค่าให้ ec2-sg รับทราฟฟิกจาก alb-sg
กฎความปลอดภัยขาเข้า (alb-sg)
กฎความปลอดภัยขาออก (alb-sg)
กฎความปลอดภัยขาเข้า (ec2-sg)
อย่างไรก็ตามฉันไม่สามารถใช้งานได้ กลุ่มเป้าหมายผ่านการตรวจสภาพ ฉันเปิดใช้เซสชันแบบ Sticky แต่การเชื่อมต่อ Websocket ล้มเหลว
การเชื่อมต่อ ws ปกติที่เคยทำงานก็หยุดทำงานเช่นกัน สิ่งนี้ทำให้ฉันเชื่อว่าฉันกำลังทำอะไรบางอย่างกับ ALB (เนื่องจากมันทำงานโดยไม่มีโหลดบาลานเซอร์)
อัปเดต 2:
ฉันเปิดใช้งานบันทึกการเข้าถึงสำหรับโหลดบาลานเซอร์ของฉัน นี่คือบันทึก:
https 2021-10-08T08:55:39.157549Z app/alb-latest/3e73469ba9514449 167.94.138.60:32854 172.31.93.226:8080 -1 -1 -1 502 - 41 1215
"รับ https://3.208.76.74:443/ HTTP/1.1" "-" ECDHE-RSA-AES128-GCM-SHA256 TLSv1.2 arn:aws:elasticloadbalancing:us-east-1:144045735746:targetgroup/ec2-8080 -เซิร์ฟเวอร์/2cbf4f7eb51c201e
"รูท=1-6160078b-606aed86364c5e3f7db627f1" "-" "arn:aws:acm:us-east-1:144045735746:certificate/53a04011-1ea7-4689-b6c6-a7372e42191d" 0 2021-10-08T096:Z091d
"ส่งต่อ" "-" "-" "172.31.93.226:8080" "-" "-" "-"
การกำหนดค่าพื้นฐานของ ALB 1
การกำหนดค่าพื้นฐาน ALB 2
ผู้ฟัง ALB
ฉันได้เปิดใช้งานการเกาะติดระดับกลุ่มกับกลุ่มเป้าหมายเป็นเวลา 1 วัน
รายละเอียดกลุ่มเป้าหมาย