15

整个 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
4

2 回答 2

7

配置缺少对 PHP 的实际中继。如果您将 location @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 资产都将工作并返回,因为它们都在 web 目录中。如果找不到该文件,它会调用 PHP。

如果直接请求 /app.php,则使用第二个块 - 我们不交付该文件,而是使用 PHP 处理它。

第三个块配置 PHP - 前两个块总是引用这个块,所以任何没有直接找到的文件都由 PHP 处理。Symfony 只有一个前端控制器 app.php,所以我们只需将所有请求发送到该入口点。

有了这个设置,它应该是相当安全的,因为只有 app.php 被 PHP 处理过。对于测试环境,您可以使用 app_dev.php 而不是 app.php(只需更改 @php 块中的文件名) - 但永远不要用于生产并且不保护测试环境。

于 2016-02-26T20:30:48.587 回答
1

尝试将代码粘贴到ISPConfig 中网站选项选项卡上的 nginx指令字段中。这应该会在配置重新生成时保存您的设置。

于 2016-03-15T14:06:19.073 回答