使用Nginx运行PHP时未find文件
最近我安装了最新版本的Nginx,看起来我很难用PHP来运行它。
这是我用于域的configuration文件:
server { listen 80; server_name localhost; location / { root /usr/share/nginx/html; index index.php; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; include fastcgi_params; }
}
这里是错误日志文件中的错误:
FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream
尝试另一种* fastcgi_param *的东西
fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html$fastcgi_script_name;
我有“文件未find”的问题,所以我把“根”的定义上移到“服务器”括号,以提供所有位置的默认值。 你总是可以通过给它自己的根目录来覆盖它。
server { root /usr/share/nginx/www; location / { #root /usr/share/nginx/www; } location ~ \.php$ { try_files $uri =404; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; include fastcgi_params; } }
另外,我可以在我的位置定义根。
也许现在回答太迟了,但是有一些事情,因为这是一个非常恼人的错误。 以下解决scheme适用于Mac OS X Yosemite。
- 这是最好的,如果你有
fastcgi_param SCRIPT_FILENAME $ document_root $ fastcgi_script_name;
-
包含快速的cgi参数应该在这条线之上。
-
你所有的目录到你正在执行的PHP文件(包括那个文件)都应该有
a+x
权限,例如
sudo chmod a+x /Users/ sudo chmod a+x /Users/oleg/ sudo chmod a+x /Users/oleg/www/ sudo chmod a+x /Users/oleg/www/a.php
在我的情况下,PHP脚本本身返回404代码。 与nginx无关。
我也有这个错误。 在我的情况下,这是因为有另一个虚拟主机指向同一个根目录。
在我的情况下,这是因为根网站目录的权限设置不正确。 要做到这一点,当你在terminal中运行这个时,你需要在父文件夹中:
sudo chmod -R 755 htmlfoldername
这将chmod html文件夹中的所有文件,出于安全原因,build议不要将其用于生产,但应该让您看到该文件夹中的文件,以确保在进行故障排除时不会出现问题。
对我来说,问题是位置path上的错字。
也许首先要检查这种问题
是项目的path。
我只花了40分钟试图debugging一个非工作/状态:
$ SCRIPT_NAME=/status SCRIPT_FILENAME=/status QUERY_STRING= REQUEST_METHOD=GET cgi-fcgi -bind -connect /var/run/php5-fpm.sock
它只是产生“文件未find”的错误,而实际的脚本(在文件系统上find)工作得很好。
结果发现,我有几个孤立的php5-fpm进程。 我杀了一切后,重新启动php5-fpm干净,它只是恢复正常。
希望这可以帮助。