Solusi Nginx untuk Cek Kesehatan AWS Amazon ELB - kembalikan 200 tanpa IF

22

Saya memiliki kode berikut yang bekerja pada Nginx untuk menjaga kesehatan AWS ELB.

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

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

Saya tahu 'JIKA' sebaiknya dihindari dengan Nginx dan saya ingin bertanya apakah seseorang akan tahu bagaimana cara mengkode ulang ini tanpa 'jika'?

Terima kasih

Adam
sumber

Jawaban:

62

Jangan terlalu rumit. Arahkan pemeriksaan kesehatan ELB Anda ke URL khusus khusus untuk mereka.

server {
  location /elb-status {
    access_log off;
    return 200;
  }
}
ceejayoz
sumber
terima kasih atas balasan Anda ... bisakah Anda menjelaskan satu sentuhan lagi ... saat ini dalam pemeriksaan kesehatan ELB saya arahkan ke /index.html. Apakah maksud Anda menunjukkan pemeriksaan kesehatan di katakanlah '/ elb-status' dan tambahkan blok server di atas? itu saja? apakah url / elb-status perlu ada? thx lagi
Adam
bekerja dengan sempurna ketika saya meletakkan / elb-status di ELB dan menambahkan blok server di atas - terima kasih banyak !!! sangat dihargai
Adam
Senang bisa membantu!
ceejayoz
1
Hmm, aku mengerti "/usr/share/nginx/html/elb-status" failed (2: No such file or directory)... tahu kenapa ini bisa terjadi?
Air Terjun Michael
1
Solusi rapi. 😙
phegde
27

Hanya untuk memperbaiki jawaban di atas, mana yang benar. Berikut ini berfungsi dengan baik:

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;
}
Hibah
sumber
5

Pembaruan: Jika validasi agen pengguna diperlukan,

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;
}
Babu
sumber