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

Apache теряет конфигурации VirtualHost «случайным образом»

Я надеюсь, что кто-то сможет пролить свет на эту проблему, которую мне не удалось решить в другом месте. Мы запускаем сервер 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 возможные причины:

  1. Когда Apache 2.2 пытается загрузить контент за URL-адресом ProxyPass и не отвечает, иногда весь виртуальный хост, использующий этот ProxyPass, перестает работать. Протестировано на Debian Squeeze и Wheezy с Apache 2.2 по умолчанию.

  2. На вашем сервере также могут возникать случайные проблемы с преобразователем DNS, которые влияют на сопоставление ServerName с vhost.

Вы можете попробовать проверить, является ли это первой причиной, загрузив 10.10.0.77:80 по IP вместо ServerName.