Solução Nginx para verificações de integridade do AWS Amazon ELB - retorno 200 sem IF

22

Eu tenho o código a seguir que está trabalhando no Nginx para manter a verificação de integridade do AWS ELB feliz.

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

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

Eu sei que o 'SE' é melhor evitar com o Nginx e queria perguntar se alguém saberia como recodificar isso sem o 'se'?

obrigado

Adão
fonte

Respostas:

62

Não complique demais as coisas. Basta apontar suas verificações de integridade do ELB para um URL especial apenas para elas.

server {
  location /elb-status {
    access_log off;
    return 200;
  }
}
ceejayoz
fonte
obrigado pela resposta ... você pode explicar um toque mais ... atualmente, na verificação de integridade do ELB, estou apontando para /index.html. Você quer dizer apontar as verificações de integridade para dizer '/ elb-status' e adicionar o bloco do servidor acima? É isso? o URL / elb-status precisa existir? thx novamente
Adam
funcionou perfeitamente quando eu coloquei / elb-status no ELB e adicionei o bloco do servidor acima - muito obrigado !!! grandemente apprecated
Adam
Ainda bem que pude ajudar!
precisa
1
Hmm, estou entendendo "/usr/share/nginx/html/elb-status" failed (2: No such file or directory)... alguma ideia de por que isso poderia ser?
Michael Waterfall
1
Solução pura. P
phegde
27

Apenas para melhorar a resposta acima, o que é correto. O seguinte funciona muito bem:

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;
}
Conceder
fonte
5

Atualização: se a validação do agente do usuário for necessária,

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
fonte