配置nginx+php服務(wù)的時(shí)候,打開php文件就顯示502系馆,一般這個(gè)是php沒(méi)啟動(dòng)的導(dǎo)致不能正常解析php文件像鸡。
因?yàn)閚ginx解析php文件是交給fastcgi_pass 來(lái)處理的粉渠,默認(rèn)一般fastcgi_pass 有兩種方式來(lái)解析php原押,一種是常見的tcp也就是監(jiān)聽9000端口胁镐,這邊只做tcp的解析。
netstat -ntlp 查看9000端口是沒(méi)有監(jiān)聽的诸衔,默認(rèn)不再監(jiān)聽9000端口了盯漂,監(jiān)聽的是/tmp/php-cgi-56.sock
1.分析問(wèn)題
我一般遇到這種問(wèn)題都是先看nginx?的日志
cd? /usr/local/nginx/logs
vim? error.log
查看是否有監(jiān)聽到 9000?端口
netstat -ntulp
2.解決問(wèn)題
找到?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?端口了
但?訪問(wèn)項(xiàng)目?網(wǎng)址?又?出現(xiàn)了??access denied
解決問(wèn)題
1.修改nginx?配置? 的fastcgi_param 的值,并添加include fastcgi_param 笨农,但是fastcgi_param的值的修改又有好幾種說(shuō)法就缆,經(jīng)過(guò)多次嘗試之后
修改如下:
fastcgi_param? SCRIPT_FILENAME/data//wwwroot/default/victdo_ws/$fastcgi_script_name;
include? ? ? ? fastcgi_params;
reload配置文件,訪問(wèn)頁(yè)面這次報(bào)錯(cuò)編程了access denied磁餐,訪問(wèn)被拒絕违崇,查看了error日志沒(méi)有發(fā)現(xiàn)錯(cuò)誤提示阿弃,繼續(xù)百度诊霹,
最終發(fā)現(xiàn)thinkphp框架的網(wǎng)址需要修改php環(huán)境的一個(gè)參數(shù),引起問(wèn)題的原因可能是:ThinkPHP的URL_MODEL問(wèn)題導(dǎo)致ngnix解析問(wèn)題。
于是我是這樣解決的:
2.進(jìn)入服務(wù)器渣淳,改php.ini文件脾还。將
cgi.fix_pathinfo的值改成1。
重啟php-fpm入愧。
3.結(jié)果終于訪問(wèn)正常了鄙漏。解決問(wèn)題。至此thinkphp框架的網(wǎng)站可以訪問(wèn)了棺蛛,接下來(lái)研究了下cgi.fix_pathinfo
似乎這個(gè)配置如果改成1形成一個(gè)上傳漏洞怔蚌,具體大家可以百度參考下,所以接下來(lái)我把nginx配置文件進(jìn)一步修改
修改為php文件在上傳目錄的執(zhí)行旁赊,也就是如下代碼:值得注意的是這個(gè)代碼需要添加php文件解析location塊之前桦踊,否則無(wú)效!
location ~ ^/public/.*\.(php|php5) {? ?deny all;? }