Мой 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, чтобы виртуальные хосты отразились. Есть альтернативный способ сделать это
Для всех остальных URL есть внутренние правила перезаписи
directory_scructure: code_folder / website
RewriteEngine On
RewriteCond% {HTTP_HOST}! $ [NC]
RewriteCond% {REQUEST_URI}! ^ / Index.php $
RewriteRule ^ (. *) $ / $ 1 [L, QSA]
У меня это сработало очень хорошо. Пожалуйста, подскажите, есть ли лучшие методы, ура!