在本地系统中为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配置文件。
有什么想法吗?
答案 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在那里