Solution Nginx pour AWS Amazon ELB Health Checks - retournez 200 sans IF

22

J'ai le code suivant qui travaille sur Nginx pour garder le contrôle de santé AWS ELB heureux.

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

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

Je sais que le "SI" est mieux évité avec Nginx et je voulais demander si quelqu'un saurait recoder cela sans le "si"?

Merci

Adam
la source

Réponses:

63

Ne compliquez pas les choses. Pointez simplement vos contrôles de santé ELB vers une URL spéciale rien que pour eux.

server {
  location /elb-status {
    access_log off;
    return 200;
  }
}
ceejayoz
la source
merci pour votre réponse ... pouvez-vous expliquer un peu plus ... actuellement dans le bilan de santé ELB je le pointe vers /index.html. Voulez-vous dire que les contrôles de santé indiquent «/ elb-status» et ajoutent le bloc serveur ci-dessus? est-ce que c'est ça? l'URL / elb-status doit-elle exister? merci encore
Adam
a parfaitement fonctionné lorsque j'ai mis / elb-status dans l'ELB et ajouté le bloc serveur ci-dessus - merci beaucoup !!! grandement apprécié
Adam
Heureux d'avoir pu aider!
ceejayoz
1
Hmm, j'obtiens "/usr/share/nginx/html/elb-status" failed (2: No such file or directory)... une idée pourquoi cela pourrait être?
Michael Waterfall
1
Solution soignée. 😙
phegde
27

Juste pour améliorer la réponse ci-dessus, qui est correcte. Ce qui suit fonctionne très bien:

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;
}
Subvention
la source
5

Mise à jour: si la validation de l'agent utilisateur est nécessaire,

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
la source