โซลูชัน Nginx สำหรับการตรวจสุขภาพของ AWS Amazon ELB - ส่งคืน 200 โดยไม่มี IF


22

ฉันมีรหัสต่อไปนี้ที่ทำงานบน Nginx เพื่อให้การตรวจสุขภาพ AWS ELB มีความสุข

map $http_user_agent $ignore {
  default 0;
  "ELB-HealthChecker/1.0" 1;
}

server {
  location / {
    if ($ignore) {
      access_log off;
      return 200;
    }
  }
}

ฉันรู้ว่า 'IF' ดีที่สุดในการหลีกเลี่ยงกับ Nginx และฉันต้องการถามว่ามีใครรู้วิธีการบันทึกสิ่งนี้โดยไม่ใช้คำว่า 'if' หรือไม่?

ขอขอบคุณ

คำตอบ:


62

อย่าทำสิ่งที่ซับซ้อนเกินไป เพียงชี้การตรวจสุขภาพของ ELB ของคุณที่ URL พิเศษสำหรับพวกเขา

server {
  location /elb-status {
    access_log off;
    return 200;
  }
}

ขอบคุณสำหรับคำตอบของคุณ ... คุณช่วยอธิบายเพิ่มเติมเกี่ยวกับการตรวจสุขภาพของ ELB ได้ไหมตอนนี้ฉันกำลังชี้ไปที่ /index.html คุณหมายถึงชี้ที่การตรวจสุขภาพที่พูดว่า '/ elb-status' และเพิ่มเซิร์ฟเวอร์บล็อกข้างต้นหรือไม่ มันคืออะไร URL / elb-status จำเป็นต้องมีอยู่ทำไม ขอบคุณอีกครั้ง
อดัม

ทำงานได้อย่างสมบูรณ์เมื่อฉันใส่ / elb-status ใน ELB และเพิ่มบล็อกเซิร์ฟเวอร์ด้านบน - ขอบคุณมาก !!! ชื่นชมอย่างมาก
อดัม

ดีใจที่ฉันช่วยได้!
ceejayoz

1
อืมฉันเข้าใจแล้ว"/usr/share/nginx/html/elb-status" failed (2: No such file or directory)... มีความคิดอะไรที่จะเป็นไปได้
น้ำตก Michael

1
วิธีแก้ปัญหาเรียบร้อย 😙
phegde

27

เพียงเพื่อปรับปรุงคำตอบข้างต้นซึ่งถูกต้อง ผลงานยอดเยี่ยมดังต่อไปนี้:

location /elb-status {
    access_log off;
    return 200 'A-OK!';
    # because default content-type is application/octet-stream,
    # browser will offer to "save the file"...
    # the next line allows you to see it in the browser so you can test 
    add_header Content-Type text/plain;
}

5

อัปเดต: หากจำเป็นต้องทำการตรวจสอบตัวแทนผู้ใช้

set $block 1;

# Allow only the *.example.com hosts. 
if ($host ~* '^[a-z0-9]*\.example\.com$') {
   set $block 0;
}

# Allow all the ELB health check agents.
if ($http_user_agent ~* '^ELB-HealthChecker\/.*$') { 
  set $block 0;
}

if ($block = 1) { # block invalid requests
  return 444;
}

# Health check url
location /health {
  return 200 'OK';
  add_header Content-Type text/plain;
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.