apache 2.4.7虚拟主机上有多个php / symfony2应用程序

时间:2014-09-09 08:51:39

标签: php apache symfony ubuntu vhosts

我迫使一个非常奇怪的问题,因为我被迫将一些我的symfony2应用程序移动到一个使用Ubuntu 14.04和Apache2 2.4.7的新服务器。

在同一台服务器上有4个不同的symfony2应用程序,配置有虚拟主机。每个都有自己的域,系统中的帐户和配置。

发生的奇怪事情是,一旦我重新启动apache2服务器(或重新加载配置),这4个站点中只有一个会起作用,这将是第一个在浏览器中输入的站点。所有其他页面都会产生这种错误:

[Tue Sep 09 10:30:27.437009 2014] [:error] [pid 16400] [client XXX.XXX.XXX.XXX:44531] PHP Fatal error:  Class 'Avalanche\\Bundle\\ImagineBundle\\AvalancheImagineBundle' not found in /home/user1/project/app/AppKernel.php on line 27

[Tue Sep 09 10:41:47.794413 2014] [:error] [pid 16398] [client XXX.XXX.XXX.XXX:44947] PHP Fatal error:  Class 'Project2\\CoreBundle\\Project2Bundle' not found in /home/user2/project2/app/AppKernel.php on line 19

非常奇怪的是,它只发生在apache2重启/重新加载后作为第一个访问过的所有网站。

我认为所有网站都有一个适当的虚拟主机配置:

<VirtualHost *:80>
    ServerAdmin me@server.com
    ServerName project1.nl 
    ServerAlias www.project1.nl
    DocumentRoot "/home/user1/project1/web"
    DirectoryIndex app.php
    <Directory "/home/user1/project1/web">
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        Require all granted
    </Directory>
    ErrorLog ${APACHE_LOG_DIR}/project1-error.log
    CustomLog ${APACHE_LOG_DIR}/project1-access.log combined
</VirtualHost>

有没有人知道从哪里开始寻找?我已经检查了虚拟主机的多种配置,php-fpm配置,每个应用程序的配置,但我找不到出路。

4 个答案:

答案 0 :(得分:1)

这是xcache的问题(http://xcache.lighttpd.net/ticket/337) 设置opcache.optimization_level = 0为我解决了这个问题。

答案 1 :(得分:0)

这是我们的vhost设置之一,适用于sf2

ServerName demo.example.fr
ServerAlias demo.example.fr
ServerAdmin admin@example.fr

DocumentRoot /var/www/vhosts/demo.example.fr/httpdocs/web/
<Directory /var/www/vhosts/demo.example.fr/httpdocs/web/>
    Options Indexes FollowSymLinks MultiViews
    AllowOverride None
    Order allow,deny
    allow from all
    <IfModule mod_rewrite.c>
        RewriteEngine On
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteRule ^(.*)$ /app.php [QSA,L]
    </IfModule>
</Directory>

就像你会注意到的那样,我们不设置目录索引,只使用mod_rewrite重写url

答案 2 :(得分:0)

您的配置中有一些内容。

在Apache 2.4中,您必须使用 + - 来定义选项。

Options -Indexes +FollowSymLinks +MultiViews

您不需要DirectoryIndex,因为它已在您的.htaccess文件中重写。

我希望您使用a2ensite启用了所有配置,否则不会加载所有其他vhost文件。

接下来要清除完整的Symfony2缓存文件夹并清除APC缓存(如果使用它)。有时候APC会缓存一些对象而你会遇到一些奇怪的错误。

答案 3 :(得分:0)

在升级到Ubuntu 14.04和Apache 2.4.7之后,我花了两天时间试图弄清楚这个完全相同的问题。

为我解决的是禁用xcache,因为它缓存了在php app / console cache之后调用的第一个应用程序的文件:clear或php composer.phar更新导致有时获得应用程序A,有时候应用程序B.

我想通过在应用程序A的各个步骤中添加var_dump指令来尝试调试symfony2。当我进入$ kernel-&gt; handle()(从app.php调用)时,我无法获得任何输出不管我怎么做。我怀疑应用程序B的AppKernel被调用但是当我尝试修改它时,它没有改变结果。这是当我意识到文件被缓存到某处的时候。我没有注意到这一点因为我没有安装apc但显然启用了xcache。

我想这个问题出现是因为symfony2应用程序中的命名空间和类名完全相同...

我将尝试查看是否可以为xcache添加每个应用程序的前缀,以了解它们是不同的。

TLDR:禁用xcache,因为使用apache2的原始配置,它无法区分两个应用程序并混合缓存。