Rozwiązanie Nginx do kontroli zdrowia AWS Amazon ELB - zwróć 200 bez IF

22

Mam następujący kod, który działa na Nginx, aby zapewnić kontrolę poprawności AWS ELB.

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

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

Wiem, że w przypadku Nginx najlepiej unikać „JEŻELI” i chciałem zapytać, czy ktoś wiedziałby, jak to przekodować bez „jeśli”?

Dziękuję Ci

Adam
źródło

Odpowiedzi:

62

Nie komplikuj rzeczy. Po prostu skieruj swoje testy ELB na specjalny adres URL tylko dla nich.

server {
  location /elb-status {
    access_log off;
    return 200;
  }
}
ceejayoz
źródło
dziękuję za odpowiedź ... czy możesz wyjaśnić coś więcej ... obecnie w teście kontrolnym ELB Wskazuję na /index.html. Czy masz na myśli skierowanie kontroli stanu na powiedz „/ elb-status” i dodaj powyższy blok serwera? czy to to? czy musi istnieć adres URL / elb-status? dzięki jeszcze raz
Adam
działało idealnie, gdy wstawiłem / elb-status w ELB i dodałem blok serwera powyżej - dziękuję bardzo !!! bardzo wdzięczny
Adam
Cieszę się, że mogłem pomóc!
ceejayoz
1
Hmm, mam pomysł "/usr/share/nginx/html/elb-status" failed (2: No such file or directory)... jakiś pomysł, dlaczego to może być?
Michael Waterfall
1
Schludne rozwiązanie. 😙
phegde
27

Aby poprawić powyższą odpowiedź, która jest poprawna. Następujące działa świetnie:

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;
}
Dotacja
źródło
5

Aktualizacja: jeśli weryfikacja agenta użytkownika jest konieczna,

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
źródło