web-dev-qa-db-fra.com

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

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

22
Adam

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

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

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