Рішення Nginx для перевірок здоров’я AWS Amazon ELB - повернення 200 без ІФ


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, і я хотів запитати, чи хтось знатиме, як перекодувати це без "якщо"?

Дякую тобі

Відповіді:


63

Не переплутайте речі. Просто вкажіть ваші перевірки здоров'я ELB за спеціальною URL-адресою саме для них.

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

спасибі за Вашу відповідь ... чи можете ви пояснити детальніше ... наразі під час перевірки стану ELB я вказую на /index.html. Ви маєте на увазі перевірку стану здоров'я на скажіть "/ elb-status" і додайте вищевказаний блок сервера? є те, що його? чи повинен існувати URL / elb-статус? thx знову
Адам

працював чудово, коли я поставив / elb-status в ELB і додав серверний блок вище - так дякую !!! Прекрасно оцінив
Адам

Радий, що можу допомогти!
ceejayoz

1
Хм, я розумію "/usr/share/nginx/html/elb-status" failed (2: No such file or directory)... будь-яка ідея, чому це могло бути?
Водоспад Майкл

1
Охайний розчин. 😙
фегде

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;
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.