AWS 开发环境中 Symfony3 项目的多个 VirtualHost

Multiples VirtualHost for Symfony3 projects in AWS development environment

我们在访问多个 Symfony3 项目时遇到问题,这些项目位于不同的文件夹中,目标是相同的 IP 地址,但在 EC2 上的不同端口中,例如:

项目 1:

项目 2:

发生在进入 Project 1 (52.1.1.1:8080) 时显示正确,但之后访问 项目 2 (52.1.1.1:8181),这失败了,奇怪地部署了来自 项目 1[ 的信息=63=].

另一种情况下,重启apache服务,进入Project2 (52.1.1.1:8181) 都显示正确,但是如果进入Project2,我们输入Project 1 (52.1.1.1:8080)显示来自Project2的信息,而不是那个项目 1.

端口 80808181 已打开。

服务器上的 Apache 配置如下:

Listen 8181
<VirtualHost *:8181>
    DocumentRoot    "/var/www/html/projects/project1/web"
    DirectoryIndex  app.php
    <Directory "/var/www/html/projects/project1/web">
        Require all granted
        Order allow,deny
        Allow from All    
        <IfModule mod_rewrite.c>
            Options -MultiViews
            RewriteEngine On
            RewriteCond %{REQUEST_FILENAME} !-f
            RewriteRule ^(.*)$ app.php [QSA,L]
        </IfModule>
    </Directory>
     <Directory /var/www/html/projects/project1>
           Options FollowSymlinks  
    </Directory>
    <Directory /var/www/html/projects/project1/web/bundles>
      <IfModule mod_rewrite.c>
       RewriteEngine Off
      </IfModule>
    </Directory>
    CustomLog  /var/www/html/projects/project1/var/logs/reg-access.log combined
    ErrorLog   /var/www/html/projects/project1/var/logs/reg.error.log
</VirtualHost>

Listen 8080
<VirtualHost *:8080>
    DocumentRoot    "/var/www/html/projects/project2/web"
    DirectoryIndex  app.php
    <Directory "/var/www/html/projects/project2/web">
        Require all granted
        Order allow,deny
        Allow from All    
        <IfModule mod_rewrite.c>
            Options -MultiViews
            RewriteEngine On
            RewriteCond %{REQUEST_FILENAME} !-f
            RewriteRule ^(.*)$ app.php [QSA,L]
        </IfModule>
    </Directory>
    <Directory /var/www/html/projects/project2>
           Options FollowSymlinks
    </Directory>
    <Directory /var/www/html/projects/project2/web/bundles>
      <IfModule mod_rewrite.c>
       RewriteEngine Off
      </IfModule>
    </Directory>
    CustomLog  /var/www/html/projects/project2/var/logs/reg-rm.log combined
    ErrorLog  /var/www/html/projects/project2/var/logs/reg.error.log
</VirtualHost>

对发生的事情有任何帮助或想法吗?

已更新

要访问项目 1,记录以下错误:

[2016-08-17 07:33:12] request.CRITICAL:未捕获 PHP 异常 Symfony\Component\Debug\Exception\FatalErrorException:"Error: Cannot redeclare class Doctrine\Common\Annotations\Annotation\Target" 在 /var/www/html/projects/project2/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/Target.php 第 31 行 {"exception":"[object] (Symfony\Component\Debug\Exception\FatalErrorException(code: 0): 错误: 无法重新声明 class Doctrine\Common\Annotations\Annotation\Target 在 /var/www/html/projects/project2/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/Target.php:31)"} []

"Vendors" 被奇怪地引用到另一个项目

根据您的评论编辑#2。

Listen 8181
<VirtualHost *:8181>
    Servername project1.com
...

Listen 8080
<VirtualHost *:8080>
    Servername project2.com
     DocumentRoot    "/var/www/html/projects/project2/web"
    DirectoryIndex  app.php

在远程主机上编辑您的主机文件以包含上述主机名。 例如,如果您在远程 Windows 主机上,请按如下方式编辑文件 "c:\Windows\System32\Drivers\etc\hosts":

52.1.1.1  project1.com
52.1.1.1  project2.com

然后在您的浏览器中使用:

http://project1.com:8181
http://project2.com:8080

这应该有效。请在投票前先进行调查。谢谢!

我找到了一个临时解决方案,我不得不修改 "app/autoload.php" 文件

之前

$ loader = require __DIR__.'/../vendor/autoload.php';

之后

$ loader = require __DIR__.'/../../project1/vendor/autoload.php';

一切正常。

但我与 Javier Eguiluz 进行了沟通,他建议尝试在服务器上安装 APC,我安装了它,回滚了对文件的更改 "app/autoload.php",它工作正常。