我正在尝试设置新安装的 Ubuntu (12.04) 服务器,但无法通过 php-fpm 运行 PHP 文件。无论我做什么,我总是收到“拒绝访问”的消息。页面(纯文本,不是 html 或任何东西)。
安装的软件包:
nginx
nginx-common
nginx-full
php5
php5-cli
php5-common
php5-fpm
Run Code Online (Sandbox Code Playgroud)
配置详情:
PHP-FPM:
user = www-data
group = www-data
listen = /var/run/php5-fpm.sock
Run Code Online (Sandbox Code Playgroud)
nginx:
user www-data;
worker_processes 3;
events { worker_connections 1024; }
Run Code Online (Sandbox Code Playgroud)
默认/测试域:
server {
listen 80;
server_name localhost;
root /extra/htdocs/default;
index index.html index.php
access_log /extra/logs/default/access.log;
error_log /extra/logs/default/error.log;
location / {
try_files $uri $uri/ /index.html;
}
location ~ \.php
{
fastcgi_split_path_info ^(.+\.php)(/.+)$;
include fastcgi_params;
fastcgi_index index.php;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
Run Code Online (Sandbox Code Playgroud)
/extra/htdocs/default/index.php:
<?php
phpinfo();
Run Code Online (Sandbox Code Playgroud)
其他一切都是默认的。Nginx 和 php-fpm 日志都没有显示错误。然而,当我加载时,http://<server-ip>/index.php我得到了“拒绝访问”页面。
故障排除:
/extra目录的所有权(用户和组)设置为www-data,并将所有权设置为 777,只是为了确定(当然,一旦它起作用,我会淡化它)。所以这肯定不是权限问题.php .html,结果相同。我真的厌倦了这个,我已经安装了两次这个设置(尽管是在 OSX 机器上),并且一切正常。有什么我忽略的吗?
日志内容:
Nginx 错误日志为空。
Nginx访问日志(去掉ip):
<ip> - - [17/Jul/2012:11:21:25 +0200] "GET /favicon.ico HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_4) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11"
<ip> - - [17/Jul/2012:11:21:28 +0200] "GET /index.php HTTP/1.1" 403 46 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_4) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11"
<ip> - - [17/Jul/2012:11:21:34 +0200] "-" 400 0 "-" "-"
Run Code Online (Sandbox Code Playgroud)
php-fpm 日志:
[17-Jul-2012 10:44:14] NOTICE: fpm is running, pid 4969
[17-Jul-2012 10:44:14] NOTICE: ready to handle connections
Run Code Online (Sandbox Code Playgroud)
Pet*_*hof 34
终于修好了。
罪魁祸首是我的配置中的这一行:
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
Run Code Online (Sandbox Code Playgroud)
如果我评论这一行,一切正常。然而,我几乎在每一篇关于 Nginx 配置的文章中都看到了这一点,所以这让我很困扰。当我第一百万次查看我的配置时,我看到cgi.fix_pathinfo(in php.ini) 被设置为 0,它应该是 1。PHP 使用的默认值也是 1,所以我必须在我的调试时间更改它,因为我记得阅读过这个值,并认为它设置正确。
无论如何,也许它可以帮助任何在谷歌上搜索这个问题的人。