Решение Nginx для AWS Amazon ELB Health Checks - возврат 200 без IF

22

У меня есть следующий код, который работает на Nginx для поддержания проверки работоспособности AWS ELB.

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

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

Я знаю, что с Nginx лучше избегать «IF», ​​и я хотел спросить, не знает ли кто-нибудь, как перекодировать это без «if»?

Спасибо

Адам
источник

Ответы:

63

Не переусердствуйте. Просто укажите ваши проверки здоровья ELB на специальный URL только для них.

server {
  location /elb-status {
    access_log off;
    return 200;
  }
}
ceejayoz
источник
спасибо за ответ ... не могли бы вы объяснить немного больше ... в настоящее время в проверке состояния ELB я указываю на /index.html. Вы имеете в виду проверку работоспособности, скажем, «/ elb-status» и добавление вышеуказанного блока сервера? это оно? должен ли существовать URL / elb-status? спасибо еще раз
Адам
сработало отлично, когда я положил / elb-status в ELB и добавил блок сервера выше - спасибо большое !!! очень признателен
Адам
Рад, что смог помочь!
ceejayoz
1
Хм, я получаю "/usr/share/nginx/html/elb-status" failed (2: No such file or directory)... есть идеи, почему это может быть?
Водопад Майкл
1
Чистое решение. P
Пхегде
27

Просто чтобы улучшить ответ выше, который является правильным. Следующее прекрасно работает:

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

Обновление: если необходима проверка пользовательского агента,

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;
}
чиновник-индус
источник