การใช้หนึ่ง ELB ต่อแอพเป็นวิธีที่จะไปที่นี่
ก่อนอื่นคุณอาจต้องใช้มันหากแต่ละแอปพลิเคชันอยู่ในโดเมนของตัวเองและคุณต้องรองรับ SSL ปัจจุบัน Amazon ELB อนุญาตใบรับรอง SSL เดียวสำหรับแต่ละโดเมนโดยต้องใช้ ELB แยกต่างหากสำหรับแต่ละโดเมนที่เปิดใช้งาน SSL (การรับรอง SSL Wildcard เป็นข้อยกเว้น)
ความท้าทายในที่นี้คือการตรวจสุขภาพของ ELB ไม่สามารถนำไปยังโดเมนเสมือนที่โฮสต์ในอินสแตนซ์ EC2 ได้ในขณะนี้ (ไม่มีส่วนหัว "โฮสต์:" ถูกส่ง) การปิงสุขภาพของ ELB ไปที่โดเมนเริ่มต้นเสมอราวกับว่าคุณได้โหลดที่อยู่ IP สำหรับอินสแตนซ์ EC2 ในเบราว์เซอร์ของคุณแล้ว ดังนั้นกาวบางตัวจำเป็นต้องได้รับการตรวจสอบสุขภาพในโดเมนเริ่มต้นแล้วตอบกลับด้วยสถานะสุขภาพของแอปพลิเคชันเฉพาะ
นี่คือการกำหนดค่าตัวอย่างการทำงานที่สามารถเพิ่มลงในserver
คำสั่งNginx มันจะถูกติดตั้งในแต่ละอินสแตนซ์ของ EC2 ที่กำลังโหลดบาลานซ์
# This goes in the `server` block noted by 'default_server', often /etc/nginx/sites-enabled/default
# All AWS Health Checks from the ELBs arrive at the default server.
# Forward these requests on the appropriate configuration on this host.
location /health-check/ {
rewrite ^/health-check/(?<domain>[a-zA-Z0-9\.]+) /api/v1/status break;
# Lie about incoming protocol, to avoid the backend issuing a 301 redirect from insecure->secure,
# which would not be considered successful.
proxy_set_header X-Forwarded-Proto 'https';
proxy_set_header "Host" $domain;
proxy_pass http://127.0.0.1;
}
ในการตั้งค่า "ตรวจสุขภาพ" ของ ELB สำหรับ "first-application.com" คุณจะต้องเลือก "HTTP" และพอร์ต 80 และป้อนเส้นทางดังนี้:
/health-check/first-application.com
ด้วยการกำหนดค่า Nginx ข้างต้นทำงานบนโฮสต์คำขอจะได้รับในโดเมนเริ่มต้นและพร็อกซีการตอบสนองจากการกำหนดค่า Nginx บนโฮสต์เดียวกันสำหรับhttps://first-application.com/api/v1/status
ด้วยวิธีนี้ไม่มีการกำหนดค่าต่อแอปใน Nginx ตราบใดที่แต่ละแอพมีชื่อโดเมนที่ไม่ซ้ำกันคุณเพียงแค่ต้องแน่ใจว่าคุณตั้งค่า ELB สำหรับแต่ละแอปอย่างเหมาะสม