Apache 2.2.22 - 随机 Vhost 错误路由

Apache 2.2.22 - 随机 Vhost 错误路由

我在 Ubuntu 12.04 上运行着 Apache 2.2.22 + PHP 5.4.9

我在这里托管三个网站。为此,我有 2 个虚拟主机指向三个不同的文件夹。

例如,这是域1

<VirtualHost *:80>
        ServerName domain1.com
        ServerAlias www.domain1.com
        ServerAdmin [email protected]
    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 的所有行,删除了所有不重要的行以保持其简单,但错误仍然存​​在。

任何想法?

答案1

我有一个理论……我自己也遇到过类似的问题。以下是我的想法:

你有没有

NameVirtualHost *:80

在你的httpd配置文件? 最好在你虚拟主机定义。

如果你没有这样的行,请添加它。如果你有明确指定 IP 的行,如下所示:

NameVirtualHost 1.2.3.4:80

然后将其更改为符合您的虚拟主机定义,反之亦然。底线是你的名称虚拟主机线路需要匹配你所有的虚拟主机行。最后,应该只有NameVirtualHost 行用于整个 Apache 配置...也就是说,在所有 .conf 文件中,您应该只看到一行 NameVirtualHost。您可以使用类似以下内容:

grep -r ^NameVirtualHost /etc/apache2/*

找到所有这些。

如果你有多个名称虚拟主机和/或所有你的虚拟主机不符合你的名称虚拟主机定义,您将从 Apache 获得不可预测/不一致的行为。

相关内容