Nginx-Lösung für AWS Amazon ELB Health Checks - 200 ohne IF zurückgeben


22

Ich habe den folgenden Code, der an Nginx arbeitet, um den AWS ELB-Healthcheck zufrieden zu stellen.

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

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

Ich weiß, dass das "WENN" mit Nginx am besten vermieden wird, und ich wollte fragen, ob jemand wissen würde, wie man dies ohne das "Wenn" umkodiert.

Danke dir

Antworten:


62

Überkomplizieren Sie die Dinge nicht. Richten Sie Ihre ELB-Gesundheitsprüfungen einfach auf eine spezielle URL, die nur für sie bestimmt ist.

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

danke für deine antwort ... kannst du mir ein bisschen mehr erklären ... derzeit im elb gesundheitscheck zeige ich es auf /index.html. Meinen Sie damit, dass die Integritätsprüfungen auf "/ elb-status" zeigen und den obigen Serverblock hinzufügen? ist es das? Muss die URL / elb-status existieren? Nochmals vielen Dank
Adam

hat einwandfrei funktioniert, als ich / elb-status in die ELB gestellt und den Serverblock oben hinzugefügt habe - vielen Dank !!! Sehr geschätzt
Adam

Froh, dass ich helfen konnte!
Ceejayoz

1
Hmm, ich bekomme "/usr/share/nginx/html/elb-status" failed (2: No such file or directory)... eine Idee, warum das sein könnte?
Michael Waterfall

1
Ordentliche Lösung. 😙
phegde

27

Nur um die obige Antwort zu verbessern, die richtig ist. Folgendes funktioniert hervorragend:

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

Update: Wenn die Validierung des Benutzeragenten erforderlich ist,

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;
}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.