为本地系统中的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在那里