Soluzione Nginx per AWS Amazon ELB Health Checks - restituisci 200 senza IF


22

Ho il seguente codice che sta lavorando su Nginx per rendere felice il controllo sanitario di AWS ELB.

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

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

So che "IF" è meglio evitare con Nginx e volevo chiedere se qualcuno sapesse come ricodificarlo senza "se"?

grazie

Risposte:


63

Non complicare eccessivamente le cose. Basta puntare i controlli di integrità ELB a un URL speciale solo per loro.

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

grazie per la tua risposta ... puoi spiegare un tocco in più ... attualmente nel controllo dello stato ELB lo sto puntando a /index.html. Intendi dire i controlli di integrità su '/ elb-status' e aggiungere il blocco server sopra? è così? deve esistere l'URL di stato / elb? grazie ancora
Adam,

ha funzionato perfettamente quando ho inserito / elb-status nell'ELB e ho aggiunto il blocco del server sopra - grazie mille !!! molto apprezzato
Adam,

Sono contento di poterti aiutare!
Ceejayoz,

1
Hmm, sto ottenendo "/usr/share/nginx/html/elb-status" failed (2: No such file or directory)... qualche idea sul perché questo potrebbe essere?
Michael Waterfall,

1
Soluzione pulita. 😙
phegde,

27

Solo per migliorare la risposta sopra, che è corretta. Di seguito funziona alla grande:

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

Aggiornamento: se è necessaria la convalida dell'agente utente,

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;
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.