配置nginx+php服務(wù)的時(shí)候,打開php文件就顯示502,一般這個(gè)是php沒啟動(dòng)的導(dǎo)致不能正常解析php文件。
因?yàn)閚ginx解析php文件是交給fastcgi_pass 來處理的,默認(rèn)一般fastcgi_pass 有兩種方式來解析php,一種是常見的tcp也就是監(jiān)聽9000端口,這邊只做tcp的解析。
netstat -ntlp 查看9000端口是沒有監(jiān)聽的,默認(rèn)不再監(jiān)聽9000端口了,監(jiān)聽的是/tmp/php-cgi-56.sock
1.分析問題
我一般遇到這種問題都是先看nginx?的日志
cd? /usr/local/nginx/logs
vim? error.log

查看是否有監(jiān)聽到 9000?端口
netstat -ntulp

2.解決問題
找到?php-fpm.conf
[root@izwz975qccspcqtrgb5hwrz ~]# cd /usr/local/php/etc
[root@izwz975qccspcqtrgb5hwrz etc]# ls -l
-rw-r--r-- 1 root root? 467 Sep 10 18:49 php-fpm.conf
將端口監(jiān)聽? 改為9000

改完重啟?php?
service? php-fpm? restart
發(fā)現(xiàn)可以監(jiān)聽到9000?端口了

但?訪問項(xiàng)目?網(wǎng)址?又?出現(xiàn)了??access denied
解決問題
1.修改nginx?配置? 的fastcgi_param 的值,并添加include fastcgi_param ,但是fastcgi_param的值的修改又有好幾種說法,經(jīng)過多次嘗試之后
修改如下:
fastcgi_param? SCRIPT_FILENAME/data//wwwroot/default/victdo_ws/$fastcgi_script_name;
include? ? ? ? fastcgi_params;
reload配置文件,訪問頁面這次報(bào)錯(cuò)編程了access denied,訪問被拒絕,查看了error日志沒有發(fā)現(xiàn)錯(cuò)誤提示,繼續(xù)百度,
最終發(fā)現(xiàn)thinkphp框架的網(wǎng)址需要修改php環(huán)境的一個(gè)參數(shù),引起問題的原因可能是:ThinkPHP的URL_MODEL問題導(dǎo)致ngnix解析問題。
于是我是這樣解決的:
2.進(jìn)入服務(wù)器,改php.ini文件。將
cgi.fix_pathinfo的值改成1。
重啟php-fpm。
3.結(jié)果終于訪問正常了。解決問題。至此thinkphp框架的網(wǎng)站可以訪問了,接下來研究了下cgi.fix_pathinfo
似乎這個(gè)配置如果改成1形成一個(gè)上傳漏洞,具體大家可以百度參考下,所以接下來我把nginx配置文件進(jìn)一步修改
修改為php文件在上傳目錄的執(zhí)行,也就是如下代碼:值得注意的是這個(gè)代碼需要添加php文件解析location塊之前,否則無效!
location ~ ^/public/.*\.(php|php5) {? ?deny all;? }