Как мне настроить проверку работоспособности ELB при использовании NameVirtualHosts и перенаправлении на www?


8

Мой ELB продолжает выводить мои экземпляры из строя, потому что проверка состояния HTTP не проходит.

У нас есть подстановочный знак DNS, и мы перенаправляем все на www:

vhost.conf:

ServerName www.example.com
ServerAlias *.example.com
RewriteEngine on
RewriteCond %{HTTP_HOST} !^www\.example\.com$ [NC]
RewriteRule ^ http://www.example.com/$1 [R=301,L]

Это отлично работает для реальных браузеров, но проверка работоспособности HTTP на / не выполняется, предположительно, потому что он получает 302.

Наилучший вариант - использовать проверку работоспособности TCP или есть способ заставить HTTP работать?


Просто используйте проверку работоспособности TCP, пока AWS не позволит настроить заголовок узла, отправляемый для проверки работоспособности. Даже имея запись по умолчанию на вашем веб-сервере, вы на самом деле не проверяете работоспособность своего приложения, а просто ваш веб-сервер, который почти идентичен проверке, открыт ли порт tcp.
Пиклер

Ответы:


11

Этот вопрос задавался на форумах AWS, и ответ состоял в том, чтобы настроить vhost по умолчанию, который обрабатывает трафик на голом IP-адресе и не выполняет никаких перенаправлений. Это будет означать, что обычные пользователи, попавшие на ваш IP-адрес, также не будут перенаправлены.

В качестве альтернативы вы можете указать часть пути URL, которую вы хотите, чтобы ELB запрашивал, и игнорировать этот путь, добавив еще один RewriteCond:

RewriteCond %{HTTP_HOST} !^www\.example\.com$ [NC]
RewriteCond %{REQUEST_URI} !^/health-check$
RewriteRule ^ http://www.example.com/$1 [R=301,L]

Обычные пользователи, попавшие на этот URL, не будут перенаправлены.

Вы также можете использовать ту же технику, чтобы обнаружить User-Agent ELB.

RewriteCond %{HTTP_HOST} !^www\.example\.com$ [NC]
RewriteCond %{HTTP_USER_AGENT} !^ELB-HealthChecker
RewriteRule ^ http://www.example.com/$1 [R=301,L]

Обычные пользователи, которые подделывают свой User-Agent, не будут перенаправлены.

Или внутренний IP-адрес ELB.

RewriteCond %{HTTP_HOST} !^www\.example\.com$ [NC]
RewriteCond %{REMOTE_ADDR} !^10\.
RewriteRule ^ http://www.example.com/$1 [R=301,L]

Чтобы эта опция работала, вам потребуется mod_rpaf(для Apache 2.2) или mod_remoteip(для Apache 2.4) изменить REMOTE_ADDRпеременную, чтобы она содержала правильную часть содержимого X-Forwarded-Forзаголовка. До тех пор, пока вы настроите его правильно, обычный пользователь не сможет избежать ответа на перенаправление.


Проблема с настройкой vhost по умолчанию состоит в том, что IP-адрес будет меняться каждый раз, когда новый экземпляр запускается или перезагружается, и я хотел бы, чтобы мой AMI по умолчанию включал поддержку проверки работоспособности. Я посмотрю в другие варианты.
Крис

Проверка IP-адреса, которую я включил, только проверяет, что IP-адрес начинается с 10.. Остальные части IP-адреса могут меняться настолько, насколько они хотят, и они все равно будут сопоставлены. Диапазон 10.*.*.*(или 10.0.0.0/8) IP-адресов не маршрутизируется через Интернет.
Ладададада

Я уже использую удаленный IP-адрес для регистрации IP-адреса запрашивающих (в отличие от ELB IP), поэтому третий вариант сработал - спасибо!
Крис

0

Добавление виртуальных хостов не является хорошей идеей, поскольку необходимо перезапустить службу httpd, чтобы виртуальные хосты отразились. Есть альтернативный способ сделать это

  1. Игнорируйте путь проверки работоспособности ELB в файле .htaccess, разделяя
    все четыре части имени DNS, как
    показано ниже: elb_dns_name: elb-name.subnet_zone.elb.amazonaws.com
  2. Для всех оставшихся URL есть внутренние правила перезаписи
    directory_scructure: code_folder / website

    RewriteEngine On
    RewriteCond% {HTTP_HOST}! $ [NC]
    RewriteCond% {REQUEST_URI}! ^ / Index.php $
    RewriteRule ^ (. *) $ / $ 1 [L, QSA]

Это сработало очень хорошо для меня. Пожалуйста, предложите, если есть лучшие методы ура!

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.