Я надеюсь, что кто-то сможет пролить свет на эту проблему, которую мне не удалось решить в другом месте. Мы запускаем сервер Apache (2.2.15), используемый для базовой балансировки нагрузки, но в конечном итоге используем директивы ProxyPass для наших различных внутренних серверов.
Проблема, похоже, в том, что Apache "случайным образом" больше не загружает определенные файлы виртуального хоста должным образом (или, что более вероятно, мы вызываем это неосознанно), и мы наблюдаем ошибки 404 или прокси от Apache.
В error_log нет ошибок, я также подтвердил, что httpd -S по-прежнему показывает загруженный vhost, но любопытно то, что если я запускаю перезагрузку httpd, он снова начинает работать. На сервере ~ 2 ГБ свободной памяти.
У нас есть директива Include vhosts / active в нашем файле httpd.conf, и в этом каталоге есть символические ссылки на фактические файлы конфигурации vhost (не верьте, что это связано, но мы хотим раскрыть), и мы загружаем около 40 различных vhost конфиги. Вот пример из одного, который происходит относительно часто (также, возможно, стоит упомянуть, что это, похоже, только определенные файлы vhost, подобные этому):
<VirtualHost 10.10.0.77:80>
ServerName url.mysite.com
ServerAlias url
Options +FollowSymLinks
ProxyPreserveHost On
ProxyPass / http://hostname.internaldomain.local:8081/
ProxyPassReverse / http://hostname.internaldomain.local:8081/
</VirtualHost>
<VirtualHost 10.10.0.77:443>
ServerName url.mysite.com
ServerAlias url
RewriteEngine On
SSLEngine on
SSLProxyEngine on
SSLProxyVerify none
SSLCertificateFile /etc/httpd/conf/ssl/mycert.com.crt
SSLCertificateKeyFile /etc/httpd/conf/ssl/mycert.key
SSLCertificateChainFile /etc/httpd/conf/ssl/mycert_chain.crt
Options +FollowSymLinks
ProxyPreserveHost On
ProxyPass / http://hostname.internaldomain.local:8081/
ProxyPassReverse / http://hostname.internaldomain.local:8081/
</VirtualHost>
из httpd.conf:
SetEnv force-proxy-request-1.0 1
SetEnv proxy-nokeepalive 1
SetEnv proxy-initial-not-pooled 1
Include vhosts/active/*.active
<Location /balancer-manager>
SetHandler balancer-manager
Order Deny,Allow
Deny from all
Allow from .mydomain.com
</Location>
<IfModule mod_headers.c>
RequestHeader unset Expect early
</IfModule>
Спасибо за вашу помощь / идеи, так как поиск по этой конкретной проблеме ни к чему не привел!
Я вижу 2 возможные причины:
Когда Apache 2.2 пытается загрузить контент за URL-адресом ProxyPass и не отвечает, иногда весь виртуальный хост, использующий этот ProxyPass, перестает работать. Протестировано на Debian Squeeze и Wheezy с Apache 2.2 по умолчанию.
На вашем сервере также могут возникать случайные проблемы с преобразователем DNS, которые влияют на сопоставление ServerName с vhost.
Вы можете попробовать проверить, является ли это первой причиной, загрузив 10.10.0.77:80 по IP вместо ServerName.