背景
业务代码写多了,也就想搞搞运维知识,刚好有空,借助这段时间,再搭建多一个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文件,所以返回空白