Solución Nginx para AWS Amazon ELB Health Checks - devuelva 200 sin IF


22

Tengo el siguiente código que funciona en Nginx para mantener contento el chequeo de salud de AWS ELB.

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

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

Sé que es mejor evitar el 'SI' con Nginx y quería preguntar si alguien sabría cómo recodificar esto sin el 'si'.

gracias

Respuestas:


63

No compliques demasiado las cosas. Simplemente apunte sus comprobaciones de estado de ELB a una URL especial solo para ellos.

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

gracias por su respuesta ... ¿puede explicar un poco más ... actualmente en el chequeo de estado de ELB lo estoy apuntando a /index.html. ¿Quiere decir señalar las comprobaciones de estado en decir '/ elb-status' y agregar el bloque de servidor anterior? ¿es asi? ¿Es necesario que exista la URL / elb-status? Gracias de nuevo
Adam

funcionó perfectamente cuando puse / elb-status en el ELB y agregué el bloque de servidor de arriba, ¡muchas gracias! muy aprecio
Adam

Me alegro de poder ayudar!
ceejayoz

1
Hmm, estoy entendiendo "/usr/share/nginx/html/elb-status" failed (2: No such file or directory)... ¿alguna idea de por qué esto podría ser?
Michael Waterfall

1
Solución ordenada Phe
phegde

27

Solo para mejorar la respuesta anterior, que es correcta. Lo siguiente funciona muy 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;
}

5

Actualización: si la validación del agente de usuario es necesaria,

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;
}
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.