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


Ich habe den folgenden Code, der an Nginx arbeitet, um den AWS ELB healthcheck glücklich zu machen.

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 "IF" am besten mit Nginx vermieden werden kann und ich wollte fragen, ob jemand das ohne das "Wenn" umschreiben könnte?

Danke dir


19
2018-06-25 00:28


Ursprung




Antworten:


Verkomplizieren Sie die Dinge nicht. Weisen Sie Ihre ELB-Gesundheitschecks nur auf eine spezielle URL für sie hin.

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

53
2018-06-25 00:47



Vielen Dank für deine Antwort ... kannst du mir bitte etwas mehr erklären ... momentan im ELB-Gesundheitscheck zeige ich es auf /index.html. Meinst du die Gesundheitschecks sagen '/ elb-status' und den obigen Serverblock hinzufügen? ist es das? Muss die / elb-status-URL existieren? Danke nochmal - Adam
funktionierte einwandfrei als ich / elb-status in den ELB legte und den Serverblock oben anfügte - vielen Dank !!! sehr geschätzt - Adam
Froh, dass ich helfen konnte! - ceejayoz
Hmm, ich verstehe "/usr/share/nginx/html/elb-status" failed (2: No such file or directory)... irgendeine Idee, warum das sein könnte? - Michael Waterfall
Ordentliche Lösung. - phegde


Nur um die obige Antwort zu verbessern, die korrekt ist. Folgendes funktioniert super:

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

23
2017-08-03 20:38





Update: Wenn die User-Agent-Validierung notwendig 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;
}

5
2018-01-05 23:47