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

Adam
quelle

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;
  }
}
ceejayoz
quelle
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;
}
Gewähren
quelle
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;
}
Babu
quelle