AWS Amazon ELB Sağlık Kontrolleri için Nginx Çözümü - IF olmadan 200 iade


22

AWS ELB sağlık kontrolünü mutlu etmek için Nginx üzerinde çalışan aşağıdaki kodu kullanıyorum.

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

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

'IF' nin Nginx ile en iyi şekilde kaçınıldığını biliyorum ve birisinin 'if' olmadan nasıl yeniden kodlanacağını bilip bilmeyeceğini sormak istiyorum.

teşekkür ederim

Yanıtlar:


62

İşleri fazla karmaşık hale getirme. ELB sağlık kontrollerinizi sadece onlar için özel bir URL'ye yönlendirmeniz yeterlidir.

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

teşekkür ederim cevap sizin için ... bir dokunuşla daha açıklayabilir misiniz ... şu anda ELB sağlık kontrolünde /index.html. Sağlık kontrollerinin '/ elb-status' dediğini ve yukarıdaki sunucu bloğunu eklediğini mi kastediyorsunuz? öyle mi / elb-status url'nin var olması gerekiyor mu? tekrar thx
Adam

ELB’de / elb statüsünü koyduğumda ve sunucu bloğunu yukarı eklediğimde mükemmel çalıştı - çok teşekkür ederim !!! büyük ölçüde apprecated
Adam

Yardımcı olduğuma sevindim!
ceejayoz

1
Hmm, "/usr/share/nginx/html/elb-status" failed (2: No such file or directory)neden ... bunun neden olabileceğine dair bir fikrim var mı?
Michael Şelalesi

1
Temiz bir çözüm. P
phegde

27

Sadece yukarıdaki cevabı geliştirmek, bu doğru. Aşağıdaki harika çalışıyor:

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

Güncelleme: Kullanıcı aracısı doğrulaması gerekirse,

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;
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.