背景
業務代碼寫多了,也就想搞搞運維知識,剛好有空,藉助這段時間,再搭建多一個lnmp環境,雖說這是PHPer比較入門的技能,不過太久沒搞,並且每次我源碼編譯PHP,就會出現一大堆問題,也是怕了,這些也遇到一個解決了好久的問題,這裏記錄一下
問題描述
nginx無法解析PHP,訪問inde.php文件返回空白,也沒有報錯
問題排查
1、是不是nginx沒有配置對,首先排查nginx.conf和我指定域名的配置,這裏是www.yzb.com.conf
listen 80;
location ~ .*\.(php|php5)?$
{
fastcgi_pass 127.0.0.1:9000;
fastcgi_param ENV test;
fastcgi_index index.php;
}
access_log /var/log/nginx/php_access.log main;
主要轉發機制都有,而且php_access.log有數據,說明這段已經跑成功了
2、PHP是不是有問題
www.conf裏
user = www
group = www
同時查看9000端口已經被php-fpm監聽,沒問題
3、代碼檢查
只是一個 phpinfo();函數,也沒啥問題
問題解決
最後無意中搜索到一篇解決方案
還是nginx.conf配置錯了
location ~ .*\.(php|php5)?$
{
fastcgi_pass 127.0.0.1:9000;
fastcgi_param ENV test;
fastcgi_index index.php;
include fastcgi_params;
}
然後
vim /etc/nginx/fastcgi_params
加入 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
發現可以了
但是爲什麼呢,nginx正常把php文件解析請求轉發給php,這時候php-fpm應該就要開始工作了啊
深入瞭解
在 nginx+php-fpm這種組合中,nginx將php交由php-fpm處理時需要使用fastcgi_params中的內建參數來解析處理請求,而安裝完成nginx後就會自動生成fastcgi_params這個文件
fastcgi_params文件裏,爲什麼要添加 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
因爲這是指 腳本文件請求的路徑,也就是說當訪問127.0.0.1/index.php的時候,需要讀取網站根目錄下面的index.php文件,如果沒有配置這一個配置項的話,nginx不會去網站根目錄下訪問.php文件,所以返回空白