运行 ISPConfig3 上的 Symfony2
Running Symfony2 on ISPConfig3
整个 ISPConfig 安装、配置和所有相关的过程都是一条艰难的道路。随着颠簸和瘀伤,我终于得到了我想要的完整包裹运行。
那些颠簸和瘀伤可能是因为我对 Linux (Debian Wheezy) 没有经验。
但是,现在一切都设置好了,我已经到了安装Symfony2的地步了。与 ISPConfig 的所有其他方面一样,这并没有按预期进行。
我的问题:
- 我不知道如何从 Web GUI 为 symfony2 配置 nginx
- 当 运行 symfony 它不会重定向到 app.php
- 当我直接转到 app.php 时,它会给我一个 500
日志告诉我 app
目录有问题,open_basedir()
无法访问。
我真正想要的是关于如何配置这一切的一些指导。
欢迎随时询问更多信息。我很乐意更新我的问题。
提前致谢。
Nginx 站点配置
server {
listen ...:80;
listen ...:443 ssl;
ssl_protocols ...
ssl_certificate ...
ssl_certificate_key ...;
server_name mydomain.tld;
root /var/www/mydomain.tld/web;
index index.html index.htm index.php index.cgi index.pl index.xhtml;
location ~ \.shtml$ {
ssi on;
}
error_page 400 /error/400.html;
error_page 401 /error/401.html;
error_page 403 /error/403.html;
error_page 404 /error/404.html;
error_page 405 /error/405.html;
error_page 500 /error/500.html;
error_page 502 /error/502.html;
error_page 503 /error/503.html;
recursive_error_pages on;
location = /error/400.html {
internal;
}
location = /error/401.html {
internal;
}
location = /error/403.html {
internal;
}
location = /error/404.html {
internal;
}
location = /error/405.html {
internal;
}
location = /error/500.html {
internal;
}
location = /error/502.html {
internal;
}
location = /error/503.html {
internal;
}
error_log /var/log/ispconfig/httpd/mydomain.tld/error.log;
access_log /var/log/ispconfig/httpd/mydomain.tld/access.log combined;
location ~ /\. {
deny all;
access_log off;
log_not_found off;
}
location = /favicon.ico {
log_not_found off;
access_log off;
}
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
location @php {
try_files $uri =404;
include /etc/nginx/fastcgi_params;
fastcgi_pass unix:/var/lib/php5-fpm/web3.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_intercept_errors on;
}
}
我想指出,此配置是由 ISPConfig 自动生成的,可能应该从 Web GUI 进行编辑。
编辑
我已通过将所有 symfony 文件夹添加到:
来修复内部服务器错误
ISPConfig Web > Sites > mydomain.tld > Options > PHP open_basedir
配置缺少到 PHP 的实际中继。如果将位置 @php 块与以下三个块交换,它应该可以工作:
location / {
try_files $uri @php;
}
location app.php {
try_files @php =404;
}
location @php {
include /etc/nginx/fastcgi_params;
fastcgi_pass unix:/var/lib/php5-fpm/web3.sock;
fastcgi_param SCRIPT_NAME app.php;
fastcgi_param SCRIPT_FILENAME app.php;
fastcgi_intercept_errors on;
}
第一个块尝试在给定的根目录中找到请求的文件,这意味着 /var/www/mydomain.tld/web - 现在所有 Symfony 资产都可以工作并返回,因为它们都在网络中目录。如果找不到文件,它会调用 PHP.
如果直接请求 /app.php,则使用第二个块 - 我们不传送该文件,而是使用 PHP 处理它。
第三个块配置PHP - 前两个块总是引用这个块,所以任何没有直接找到的文件都由PHP处理。 Symfony 只有一个前端控制器,app.php,所以我们只需将所有请求发送到该入口点。
使用此设置,它应该非常安全,因为 PHP 只处理过 app.php。对于测试环境,您可以使用 app_dev.php 而不是 app.php(只需更改 @php 块中的文件名)- 但绝不能用于生产环境并且不保护测试环境。
尝试将代码粘贴到 ISPConfig 网站 Options 选项卡上的 nginx Directives 字段中。这应该会在配置重新生成时保存您的设置。
整个 ISPConfig 安装、配置和所有相关的过程都是一条艰难的道路。随着颠簸和瘀伤,我终于得到了我想要的完整包裹运行。
那些颠簸和瘀伤可能是因为我对 Linux (Debian Wheezy) 没有经验。
但是,现在一切都设置好了,我已经到了安装Symfony2的地步了。与 ISPConfig 的所有其他方面一样,这并没有按预期进行。
我的问题:
- 我不知道如何从 Web GUI 为 symfony2 配置 nginx
- 当 运行 symfony 它不会重定向到 app.php
- 当我直接转到 app.php 时,它会给我一个 500
日志告诉我 app
目录有问题,open_basedir()
无法访问。
我真正想要的是关于如何配置这一切的一些指导。
欢迎随时询问更多信息。我很乐意更新我的问题。
提前致谢。
Nginx 站点配置
server {
listen ...:80;
listen ...:443 ssl;
ssl_protocols ...
ssl_certificate ...
ssl_certificate_key ...;
server_name mydomain.tld;
root /var/www/mydomain.tld/web;
index index.html index.htm index.php index.cgi index.pl index.xhtml;
location ~ \.shtml$ {
ssi on;
}
error_page 400 /error/400.html;
error_page 401 /error/401.html;
error_page 403 /error/403.html;
error_page 404 /error/404.html;
error_page 405 /error/405.html;
error_page 500 /error/500.html;
error_page 502 /error/502.html;
error_page 503 /error/503.html;
recursive_error_pages on;
location = /error/400.html {
internal;
}
location = /error/401.html {
internal;
}
location = /error/403.html {
internal;
}
location = /error/404.html {
internal;
}
location = /error/405.html {
internal;
}
location = /error/500.html {
internal;
}
location = /error/502.html {
internal;
}
location = /error/503.html {
internal;
}
error_log /var/log/ispconfig/httpd/mydomain.tld/error.log;
access_log /var/log/ispconfig/httpd/mydomain.tld/access.log combined;
location ~ /\. {
deny all;
access_log off;
log_not_found off;
}
location = /favicon.ico {
log_not_found off;
access_log off;
}
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
location @php {
try_files $uri =404;
include /etc/nginx/fastcgi_params;
fastcgi_pass unix:/var/lib/php5-fpm/web3.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_intercept_errors on;
}
}
我想指出,此配置是由 ISPConfig 自动生成的,可能应该从 Web GUI 进行编辑。
编辑
我已通过将所有 symfony 文件夹添加到:
来修复内部服务器错误ISPConfig Web > Sites > mydomain.tld > Options > PHP open_basedir
配置缺少到 PHP 的实际中继。如果将位置 @php 块与以下三个块交换,它应该可以工作:
location / {
try_files $uri @php;
}
location app.php {
try_files @php =404;
}
location @php {
include /etc/nginx/fastcgi_params;
fastcgi_pass unix:/var/lib/php5-fpm/web3.sock;
fastcgi_param SCRIPT_NAME app.php;
fastcgi_param SCRIPT_FILENAME app.php;
fastcgi_intercept_errors on;
}
第一个块尝试在给定的根目录中找到请求的文件,这意味着 /var/www/mydomain.tld/web - 现在所有 Symfony 资产都可以工作并返回,因为它们都在网络中目录。如果找不到文件,它会调用 PHP.
如果直接请求 /app.php,则使用第二个块 - 我们不传送该文件,而是使用 PHP 处理它。
第三个块配置PHP - 前两个块总是引用这个块,所以任何没有直接找到的文件都由PHP处理。 Symfony 只有一个前端控制器,app.php,所以我们只需将所有请求发送到该入口点。
使用此设置,它应该非常安全,因为 PHP 只处理过 app.php。对于测试环境,您可以使用 app_dev.php 而不是 app.php(只需更改 @php 块中的文件名)- 但绝不能用于生产环境并且不保护测试环境。
尝试将代码粘贴到 ISPConfig 网站 Options 选项卡上的 nginx Directives 字段中。这应该会在配置重新生成时保存您的设置。