Назад | Перейти на главную страницу

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

Мой 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?

Этот вопрос был спросил на форумах AWS и ответ заключался в том, чтобы настроить виртуальный хост по умолчанию, который обрабатывает трафик на голом 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 заголовок. Если вы настроили это правильно, обычный пользователь не сможет избежать ответа перенаправления.

Добавление виртуальных хостов - не лучшая идея, так как нужно перезапустить службу 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]

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