Я пытаюсь настроить аварийное переключение для сервера с обратным проксированием со статической копией ресурсов localhost, которые обычно обслуживаются системой управления контентом. Я использовал wget
чтобы получить статическую копию динамического сайта для аварийного переключения.
Я пробовал использовать конфигурацию, похожую на Резервное место для директивы Apache ProxyPass? чтобы начать работу, и это довольно просто, но я получаю ошибку в заголовке.
Вот моя (очищенная) конфигурация прокси:
DocumentRoot /var/www/www.example.com/htdocs
ProxyRequests Off
ProxyPreserveHost On
ProxyPass "/site/" "balancer://cms"
ProxyPassReverse "/site/" "balancer://cms"
ProxyPassReverse "/site/" "http://ip-10-1-1-229.ec2.internal/site/"
<Proxy "balancer://cms">
#BalancerMember "http://ip-10-1-1-229.ec2.internal/site/" loadfactor=1
# For localhost services, a backup of the CMS's site
BalancerMember "http://127.0.0.1/site-backup/www.example.com/site/" loadfactor=10 status=+H
</Proxy>
<Directory "/var/www/www.example.com/htdocs/site-backup">
Order allow,deny
Allow from all
Options Indexes FollowSymlinks
DirectoryIndex index.html
</Directory>
(Здесь я закомментировал элемент балансировки, который идет в реальную систему CMS - эта часть работает нормально - так что я могу протестировать локальную статическую копию.)
Есть index.html
файл в /var/www/www.example.com/site-backup/www.example.com/
и он загружается, когда я пытаюсь ударить http://www.example.com/site/
, но никакие другие ресурсы страницы (CSS, изображения и т. д.) не загружаются. У них есть URL-адреса на странице, например:
У меня есть файл, foo.png
по этому адресу:
/var/www/www.example.com/htdocs/site-backup/www.example.com/site/sites/default/files/foo.png
Но когда это изображение загружается браузером, я получаю 500 Internal Server Error
ответ, и я вижу это в журнале ошибок httpd:
[прокси: предупреждение] [pid 3182: tid 2838395712] [клиент 71.127.40.115:38208] AH01144: для URL /site/site/sites/default/files/foo.png не действовал обработчик протокола. Если вы используете DSO-версию mod_proxy, убедитесь, что подмодули прокси включены в конфигурацию с помощью LoadModule., Referer: http://test.example.com/site/
Я заметил, что URL-адрес, указанный в сообщении об ошибке, имеет дополнительный /site/
в URL-адресе, поэтому я решил, что он удваивается, потому что я пытаюсь обслужить пространство URL-адресов, включая /site/
из каталога, содержащего /site/
и wget
вероятно, сейчас не идеален, поэтому я создал символическую ссылку из /var/www/www.example.com/site-backups/www.example.com/site/site/sites
->
/var/www.www.example.com/site-backups/www.example.com/site/sites
. Это должно было исправить любую глупость из-за путаницы в URL.
Но это, похоже, ничего не исправило; mod_proxy
все еще жалуется на протокол. mod_proxy_http
определенно включен, поскольку нормальный ProxyPass
директива для CMS работает должным образом (если она включена).
Я уверен, что это довольно простая вещь, которую мне не хватает, но я не могу этого понять. Любая помощь будет принята с благодарностью.
фейспалм
Оказалось, что на моем ProxyPass
директива:
ProxyPass "/site/" "balancer://cms"
должно было:
ProxyPass "/site/" "balancer://cms/"
(Обратите внимание на косую черту перед закрывающей кавычкой.)
Это буквально все исправило.
Я счастлив удалить этот вопрос и ответить, если люди захотят закрыть его как «простую опечатку», но пока я оставлю его. Если я получу вверх проголосуя за этот ответ, я удалю эту заметку и буду считать ее общественной услугой для всех, кто может совершить ту же ошибку.
В моем случае мне понадобилось proxy_ajp
модуль.
a2enmod proxy proxy_http proxy_ajp
То же, что и kujiy, мне пришлось добавить mod_ajp
.
Я использую apache4.
В моем журнале были следующие сообщения:
No protocol handler was valid for the URL /jira.
If you are using a DSO version of mod_proxy,
make sure the proxy submodules are included in
the configuration using LoadModule
поэтому я добавил (я имею в виду раскомментированный) следующую строку в свой httpd.conf:
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
сохранены, и перезапущен сервер Apache.