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

Apache 2.2.22 - случайная неверная маршрутизация Vhost

У меня Apache 2.2.22 + PHP 5.4.9, работающий на Ubuntu 12.04.

Я размещаю здесь три сайта. Для этого у меня есть 2 виртуальных хоста, указывающих на три разные папки.

Например, это один Vhost для домен1

<VirtualHost *:80>
        ServerName domain1.com
        ServerAlias www.domain1.com
        ServerAdmin support@server.com
    DocumentRoot /mnt/htdocs/domain1.com/public
    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>
    <Directory /mnt/htdocs/domain1.com/public>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        Order allow,deny
        allow from all
    </Directory>
    ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
    <Directory "/usr/lib/cgi-bin">
        AllowOverride None
        Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
        Order allow,deny
        Allow from all
    </Directory>
    ErrorLog ${APACHE_LOG_DIR}/domain1.com-error.log
    CustomLog ${APACHE_LOG_DIR}/domain1.com-access.log combined
</VirtualHost>

Дело в том, что 1% обращений попадает в неправильную папку. остальные 99% попадают в правильную папку и разрешают правильный домен / код.

Пример ошибки в журнале ошибок domain1.com

[Fri Feb 14 15:21:45 2014] [error] [client 10.183.250.134] PHP Fatal error:  Class 'Sitemap\\SitemapServiceProvider' not found in /mnt/htdocs/domain1.com/vendor/laravel/framework/src/Illuminate/Foundation/ProviderRepository.php on line 123, referer: http://www.site2.com/someurl

Этот поставщик услуг не существует, поскольку домен domain2.com перенаправлен в папку domain1.com.

Эта ошибка ПОЛНОСТЬЮ СЛУЧАЙНА. Если я перезагружу страницу с ошибкой, сайт отобразится нормально.

Я проверил все строки vhosts, стер все некритичное, чтобы не усложнять задачу, но ошибка не исчезла.

Есть мысли?

У меня есть теория ... Я сам сталкивался с подобной проблемой. Вот мои мысли:

У тебя есть

NameVirtualHost *:80

линия в вашем httpd.conf? Желательно перед всеми твоими VirtualHost определения.

Если у вас нет такой строки, добавьте ее. Если у вас есть строка, в которой явно указан IP-адрес, например:

NameVirtualHost 1.2.3.4:80

затем либо измените его, чтобы он соответствовал вашему VirtualHost определения, или наоборот. Суть в том, что ваш ИмяVirtualHost линия должна соответствовать всем вашим VirtualHost линий. Наконец, должно быть только один Строка NameVirtualHost для всей конфигурации Apache ... т.е. во всех файлах .conf вы должны видеть только одну строку NameVirtualHost. Вы можете использовать что-то вроде:

grep -r ^NameVirtualHost /etc/apache2/*

найти их всех.

Если у вас более одного ИмяVirtualHost и / или все ваши VirtualHost не соответствует твоему ИмяVirtualHost определение, вы получите непредсказуемое / непоследовательное поведение от Apache.