操作系统:Centos7
WEB服务器:Nginx
按照网上资料,安装了nginx,并配置成功,可以通过网址访问。
后期安装了PHP,以下均为配置时出现的问题和解决过程思路,记录在此。
Nginx与PHP都安装好后,配置Nginx解析PHP,要在nginx.conf中添加php解析信息。
打开nginx.conf,发现比网上资料说的要短的多,而且http段落里根本没有server段。
然后打开同目录下的nginx.conf.default,发现这里的内容比较全,本想把nginx.conf.default的有关内容拷贝到nginx.conf里,但想到之前网页已经正常运行,说明nginx.conf的server配置已经正确了,于是,仔细研究nginx.conf,发现在http段的最后,有一句
include /etc/nginx/conf.d/*.conf;
于是到/etc/nginx/conf.d目录,发现有个default.conf,打开看,发现server段在这个文件里。
原来Nginx为了使配置文件nginx.conf内容不至于太乱,允许把一些配置写在其他文件里,只要include一下这个文件就可了,这样,以后改动或添加server时,只改相应文件即可。
打开/etc/nginx/conf.d/default.conf,找到端口为80的server段,原内容为:
server {
listen 80;
server_name www.somesomesome.com;
...
}
于是在这个server段里添加以下内容
location ~ .php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
重启nginx
./nginx -s reload
写了一个以下内容的info.php文件,放网页根目录测试用
网页测试,发现PHP不解析,直接被下载下来了,失败。
2.2 查找问题检查php-fpm是否运行,以及端口是否是9000
ps -ef | grep php netstat -anp | grep 9000
已经运行,且端口是9000没错。
没办法,到处搜索资料,网上关于PHP不解析的文章很多,但大部分都是在纠结location那一节的写法,有些包含一些关于php的配置修改,各种方法依次测试,均无效,改的接近崩溃,计划要重装Nginx了。
在要放弃前,做最后一次尝试,测试看是不是加进conf的内容根本就没起作用。
尝试把这个server段里的root均指向一个不存在目录,也就是把网页文件位置指向改了。
再次测试,居然网页还是正常!
说明加进这个server段的location内容被nginx忽略了或根本就没被解释。
再次打开研究default.conf,这个文件中写了两个server,第一个server是端口80,刚才一直在这个server内容里改来改去,后面其实还有第二个server,一直被无视。这次注意到第一个server里有一句话:
rewrite ^(.*)$ https://$host$1 permanent;
这是把http重定向到https了,看下一个server,果然端口是443。
至此,终于明白了,原来第一个80端口的server把所有请求转给443端口的server了。
于是,把上面的location段落,移到下面这个443端口的server里,重启nginx。
再次测试phpinfo,问题解决。



