配置nginx+php服务的时候,打开php文件就显示502,一般这个是php没启动的导致不能正常解析php文件。
因为nginx解析php文件是交给fastcgi_pass 来处理的,默认一般fastcgi_pass 有两种方式来解析php,一种是常见的tcp也就是监听9000端口,这边只做tcp的解析。
netstat -ntlp 查看9000端口是没有监听的,默认不再监听9000端口了,监听的是/tmp/php-cgi-56.sock
1.分析问题
我一般遇到这种问题都是先看nginx 的日志
连接被拒绝cd /usr/local/nginx/logs
vim error.log
查看是否有监听到 9000 端口
没有 监听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
将端口监听 改为9000
改完重启 php
service php-fpm restart
发现可以监听到9000 端口了
但 访问项目 网址 又 出现了 access denied
解决问题
1.修改nginx 配置 的fastcgi_param 的值,并添加include fastcgi_param ,但是fastcgi_param的值的修改又有好几种说法,经过多次尝试之后
修改如下:
fastcgi_param SCRIPT_FILENAME/data//wwwroot/default/victdo_ws/$fastcgi_script_name;
include fastcgi_params;
reload配置文件,访问页面这次报错编程了access denied,访问被拒绝,查看了error日志没有发现错误提示,继续百度,
最终发现thinkphp框架的网址需要修改php环境的一个参数,引起问题的原因可能是:ThinkPHP的URL_MODEL问题导致ngnix解析问题。
于是我是这样解决的:
2.进入服务器,改php.ini文件。将
cgi.fix_pathinfo的值改成1。
重启php-fpm。
3.结果终于访问正常了。解决问题。至此thinkphp框架的网站可以访问了,接下来研究了下cgi.fix_pathinfo
似乎这个配置如果改成1形成一个上传漏洞,具体大家可以百度参考下,所以接下来我把nginx配置文件进一步修改
修改为php文件在上传目录的执行,也就是如下代码:值得注意的是这个代码需要添加php文件解析location块之前,否则无效!
location ~ ^/public/.*\.(php|php5) { deny all; }
网友评论