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

Я надеюсь, что кто-то смог проливать некоторый свет на эту проблему, которую у меня не было удачи при решении в другом месте. Мы выполняем Apache (2.2.15) сервер, используемый для основного выравнивания нагрузки, но в конечном счете используем директивы ProxyPass для наших различных серверов бэкэнда.

Проблема, кажется, что Apache "случайным образом" больше не имеет конкретные virtualhost файлы, правильно загруженные (или более вероятно, мы вызываем это невольно), и и мы видим 404 с или проксируем ошибки от Apache.

Нет никаких ошибок в error_log, я также подтвердил, что httpd-S все еще показывает загруженный vhost, но любопытная часть - то, что, если я выпускаю перезагрузку httpd, она начинает работать снова. Сервер имеет ~2GB свободную память.

У нас есть Включение vhosts/active директива в нашем httpd.conf файле, и в рамках того каталога символьные ссылки на фактические vhost файлы конфигурации (не полагайте, что это связывается, но требуется для раскрытия), и мы загружаем приблизительно 40 различных конфигураций vhost. Вот пример от одного в особенности, который происходит относительно requently (также может стоить упомянуть, что это, кажется, только определенные 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>

Спасибо за Вашу справку/идеи, как ищущий по этой конкретной проблеме не имеет меня нигде!

0
задан 15 June 2015 в 21:50
1 ответ

Я вижу 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.

1
ответ дан 4 December 2019 в 16:54

Теги

Похожие вопросы