編碼的世界 / 優質文選 / 文明

nginx+php 出現404錯誤解決方法


2022年7月30日
-   

http://www.51ou.com/browse/linuxwt/32263.html
錯誤日志
裝好 nginx-1.0.5 與 php-5.3.6(php-fpm) 迫不及待的測試 info.php(<?php phpinfo(); ?>),但是只返回了空白頁,什麼也沒有輸出,以下是錯誤日志。
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 瀏覽 測試頁返回空白頁,什麼都沒有。

2 使用curl  測試 測試頁提示404沒找到。
# curl -I  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  瀏覽

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/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;

熱門文章