ฉันได้ติดตามการฝึกอบรมที่จำเป็นของ AWS ของ lynda.comและฉันได้ตั้งค่าอินสแตนซ์ EC2 สำเร็จแล้ว แต่เมื่อฉันพยายามวางไว้หลังโหลดบาลานเซอร์ ฉันไม่สามารถเข้าถึงได้ผ่าน DNS สาธารณะของ ELB

บนคอนโซล AWS Load Balancer ระบุว่าสถานะของอินสแตนซ์ของฉันคือ OutOfService ตามบทช่วยสอน ฉันตั้งค่าการตรวจสุขภาพสำหรับตัวโหลดบาลานซ์ด้วยเส้นทางของ/heartbeat.php.

ฉันยังมีกลุ่มความปลอดภัยสองกลุ่มที่ตั้งขึ้น อันแรกชื่อLoad Balancer - Prodซึ่งอนุญาตให้ทราฟฟิก HTTP บนพอร์ต80จากใครก็ได้ โหลดบาลานเซอร์ของฉันอยู่ในกลุ่มความปลอดภัยนี้ นอกจากนี้ ฉันมีกลุ่มความปลอดภัยที่เรียกว่าWeb Tier - Prodซึ่งอนุญาตเฉพาะการรับส่งข้อมูล HTTP บนพอร์ต80จากกลุ่มความปลอดภัยLoad Balancer - Prodและ IP ของฉันเอง, SSH บน IP ของฉัน และการรับส่งข้อมูล MYSQL จากตัวเองกลุ่มความปลอดภัยWeb Tier - Prod

ฉันสามารถเข้าถึงอินสแตนซ์ด้วย DNS สาธารณะของตัวเอง และสามารถใช้ SSH ได้ แต่ไม่สามารถเข้าถึงได้ผ่าน DNS สาธารณะของตัวโหลดบาลานซ์

เมื่อฉัน ssh เข้าไปและแฮ็คบันทึกการเข้าถึง NGINX ฉันเห็นสิ่งนี้บันทึกไว้หลายครั้ง

172.??.??.?? - - [26/Aug/2015:16:43:46 +0000] "GET /heartbeat.php HTTP/1.1" 401 203 "-" "ELB-HealthChecker/1.0"

ฉันควรจะเห็นรหัสสถานะ 200 แทนที่จะเป็น 401 203 ฉันเดา ฉันพยายามเปลี่ยนการอนุญาต/var/www/เป็น 777 ซ้ำ ๆ เพื่อทดสอบ แต่ก็ไม่ได้สร้างความแตกต่าง

answer

หากการตรวจสอบสถานะส่งคืน 401 AWS จะเห็นว่าอินสแตนซ์นั้นไม่มีประสิทธิภาพและนำออกจาก ELB เนื่องจากคุณไม่มีอินสแตนซ์ที่ดี ELB จึงหยุดทำงาน

โปรดทราบว่า AWS เข้าถึง/heartbeat.phpผ่านทาง IP ที่ไม่ผ่านชื่อ DNS ตรวจสอบการตอบสนองโดยใช้curl -I http://<your instance IP>/heartbeat.phpและปรับการกำหนดค่าเซิร์ฟเวอร์ของคุณหากโฮสต์เสมือนเริ่มต้นไม่ได้ให้บริการ