Symfony+nginx虚拟主机配置不工作


Symfony + nginx virtual host configuration not working

为本地系统中的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;
}

在浏览器中加载应用程序时抛出错误502坏网关错误:未指定输入文件。

从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_dev配置文件吗。

有什么想法吗??

 fastcgi_param  SCRIPT_FILENAME  $realpath_root$fastcgi_script_name;

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

使用$realpath_root$fastcgi_script_name,web服务器将根据服务器块中的根定义查找PHP脚本的"真实"路径。Nginx必须具有该路径的读取权限才能正常工作。您的代码位于/home/guest/中,如果nginx以"www数据"的身份运行,则授予它访问目录的权限,或者以"guest"用户的身份运行nginx(忽略此操作的安全性影响)。

为什么不从官方文档中开始配置(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;
}

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

你能确保php-fpm.sock文件在前面提到的路径中吗。我不得不像下面的一样更新fastcgi_pass

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

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