AWS 开发环境中 Symfony3 项目的多个 VirtualHost
Multiples VirtualHost for Symfony3 projects in AWS development environment
我们在访问多个 Symfony3 项目时遇到问题,这些项目位于不同的文件夹中,目标是相同的 IP 地址,但在 EC2 上的不同端口中,例如:
项目 1:
- 52.1.1.1:8080/登录
- /var/www/html/projects/project1/
项目 2:
- 52.1.1.1:8181/登录
- /var/www/html/projects/project2/
发生在进入 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.
端口 8080 和 8181 已打开。
服务器上的 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",它工作正常。
我们在访问多个 Symfony3 项目时遇到问题,这些项目位于不同的文件夹中,目标是相同的 IP 地址,但在 EC2 上的不同端口中,例如:
项目 1:
- 52.1.1.1:8080/登录
- /var/www/html/projects/project1/
项目 2:
- 52.1.1.1:8181/登录
- /var/www/html/projects/project2/
发生在进入 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.
端口 8080 和 8181 已打开。
服务器上的 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",它工作正常。