热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Nginx服务器404错误与root指令和fastcgi_param指令

错误日志装好nginx-1.0.5与php-5.3.6(php-fpm)迫不及待的测试info.php(?phpphpinfo();?),但是只返回了空白页,什么也没有输出,以下是错误日志。192.168.6.82--[01/Aug/2011:13:54:20+0800]GET/info.phpHTTP/1.14045
错误日志
装好 nginx-1.0.5 与 php-5.3.6(php-fpm) 迫不及待的测试 info.php(),但是只返回了空白页,什么也没有输出,以下是错误日志。
192.168.6.82 - - [01/Aug/2011:13:54:20 +0800] "GET /info.php HTTP/1.1" 404 5 "-" "Mozilla/5.0 (X11; U; Linux x86_64; zh-CN; rv:1.9.2.9) Gecko/20100827 Red Hat/3.6.9-2.el6 Firefox/3.6.9"
192.168.6.82 - - [01/Aug/2011:14:57:30 +0800] "HEAD /info.php HTTP/1.1" 404 0 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.12.6.2 zlib/1.2.3 libidn/1.18 libssh2/1.2.2"192.168.6.82 - - [01/Aug/2011:13:58:57 +0800] "GET /index.html HTTP/1.1" 200 151 "-" "Mozilla/5.0 (X11; U; Linux x86_64; zh-CN; rv:1.9.2.9) Gecko/20100827 Red Hat/3.6.9-2.el6 Firefox/3.6.9"

分析
1 使用firefox 浏览 http://192.168.5.87/info.php 测试页返回空白页,什么都没有。



2 使用curl  测试 http://192.168.5.87/info.php 测试页提示404没找到。
# curl -I http://192.168.5.87/info.php
HTTP/1.1 404 Not Found
Server: nginx/1.0.5
Date: Mon, 01 Aug 2011 06:54:46 GMT
Content-Type: text/html
Connection: keep-alive
X-Powered-By: PHP/5.3.6
3 使用firefox  浏览 http://192.168.5.87/index.html



4 静态页面的index.html 是可以访问的,而动态的info.php确是404 找不到,为什么会这样那?index.html 文件目录是nginx默认安装目录 /usr/local/nginx/html,而
info.php 我把它放到了 /data/web 下 是不是这个原因 ?看下nginx.conf配置文档
 server {
listen       80;
        server_name  localhost;
        location / {
index  index.html index.htm;
root   html;
        }
   
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
root   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;
        }
   }
过程
尝试更改下
location ~ \.php$ {
root           /data/web;
fastcgi_pass   127.0.0.1:9000;
fastcgi_index  index.php;
fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
include        fastcgi_params;
        }
nginx -t && nginx -s reload
测试访问仍然不行
google 
再次更改
location ~ \.php$ {
root           /data/web;
fastcgi_pass   127.0.0.1:9000;
fastcgi_index  index.php;
fastcgi_param  SCRIPT_FILENAME /data/web$fastcgi_script_name;
include        fastcgi_params;
        }
nginx -t && nginx -s reload
测试一下
[root@me zongm]# curl -I http://192.168.5.87/info.php
HTTP/1.1 200 OK
Server: nginx/1.0.5
Date: Mon, 01 Aug 2011 08:34:17 GMT
Content-Type: text/html
Connection: keep-alive
X-Powered-By: PHP/5.3.6
firefox 测试ok!



总结
问题还是在配置文档上,估计不少朋友会遇到php 输出空白页什么也不显示,
主要是nginx 的 root 指令 或者 fastcgi_param 指令 配置出了问题详细的文档请参考这里!

再看下nginx.conf配置文档,
  server{
        location / {
index  index.html index.htm;
root   html;
        }
        location = /50x.html {
root   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;
        }
   }

1 发现除了location ~ \.php$以外,每个location 下都有个root 指令用于载入web文件根目录,默认都是 /usr/local/nginx/html,第一个错误是没有在 location ~ \.php$ 添加web文件根目录
root  /data/web;
或者在server 字段下加入一个 root 例如
server {
.........
root  /data/web;
.........
}
2 参考这里知道了 PHP使用fastcgi_param 指令的 SCRIPT_FILENAME参数决定需要执行哪个脚本,所以这个位置也要改成
fastcgi_param  SCRIPT_FILENAME  /data/web$fastcgi_script_name;

推荐阅读
author-avatar
不想不知痛_378
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有