Symfony + nginx虚拟主机配置无法正常工作

时间:2016-03-27 13:39:23

标签: php symfony nginx

在本地系统中为symfony应用程序创建虚拟主机

这是nginx配置文件

server {
    listen 80;
    server_name local.symfony;
    root /home/guest/symfony_demo/web;

    rewrite ^/app\.php/?(.*)$ /$1 permanent;

    try_files $uri @rewriteapp;

    location @rewriteapp {
        rewrite ^(.*)$ /app.php/$1 last;
    }

    # Deny all . files
    location ~ /\. {
        deny all;
    }

    location ~ ^/(app|app_dev)\.php(/|$) {
        fastcgi_split_path_info ^(.+\.php)(/.*)$;
        include fastcgi_params;
        fastcgi_param  SCRIPT_FILENAME 
        $document_root$fastcgi_script_name;
        fastcgi_index app.php;
        send_timeout 1800;
        fastcgi_read_timeout 1800;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
    }

    # Statics
    location /(bundles|media) {
        access_log off;
        expires 30d;

       try_files $uri @rewriteapp;
    }

    error_log /var/log/nginx/project_error.log;
    access_log /var/log/nginx/project_access.log;

}

在浏览器中加载app时会抛出错误 502 Bad Gateway错误:未指定输入文件。

从error.log文件中捕获错误:

FastCGI sent in stderr: "Unable to open primary script: /home/guest/symfony_demo/web/app.php (No such file or directory)" while reading response header from upstream, client: 127.0.0.1, server: local.symfony, request: "GET / HTTP/1.1", upstream: "fastcgi://unix:/var/run/php5-fpm.sock:", host: "local.symfony"

任何人都可以帮我配置symfony app到app_dev配置文件。

有什么想法吗?

3 个答案:

答案 0 :(得分:2)

 fastcgi_param  SCRIPT_FILENAME  $realpath_root$fastcgi_script_name;

这一行是问题所在。如果删除它,您的错误就会消失。然后,由于Symfony使用符号链接到当前项目,您可能会遇到Opcache问题。

使用$ realpath_root $ fastcgi_script_name,Web服务器根据服务器块中的根定义查看PHP脚本的“真实”路径。 Nginx必须具有对此工作路径的读取权限。你的代码在/ home / guest /中,如果nginx以“www-data”的形式运行,赋予它对你的目录的权限,或者运行nginx作为“guest”用户(忽略这个的安全含义)。

答案 1 :(得分:0)

为什么不从官方文档(http://symfony.com/doc/current/cookbook/configuration/web_server_configuration.html#nginx)开始配置,当它工作时,您可以尝试添加自定义配置(缓存sttaic文件......)?

这应该有效:

server {
    listen 80;
    server_name local.symfony;
    root /home/guest/symfony_demo/web;

    location / {
        try_files $uri /app_dev.php$is_args$args;
    }

    location ~ ^/(app_dev|config)\.php(/|$) {
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_split_path_info ^(.+\.php)(/.*)$;
        include fastcgi_params;
        fastcgi_param  SCRIPT_FILENAME  $realpath_root$fastcgi_script_name;
        fastcgi_param DOCUMENT_ROOT $realpath_root;
    }

    error_log /var/log/nginx/project_error.log;
    access_log /var/log/nginx/project_access.log;
}

答案 2 :(得分:0)

当nginx无法找到php-fpm.sock文件时会发生此错误。

你能确保php-fpm.sock文件在提到的路径中吗?我必须更新fastcgi_pass,如下所示

fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;

因为我的php-fpm.sock在那里