引言
操作系统:Centos7 WEB服务器:Nginx 按照网上资料,安装了nginx,并配置成功,可以通过网址访问。 后期安装了PHP,以下均为配置时出现的问题和解决过程思路,记录在此。
1 问题一 nginx.conf中没有server段落
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时,只改相应文件即可。
2 问题二 配置完server后,PHP不能解析
2.1 修改nginx.conf配置文件
打开/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 phpinfo();?>
网页测试,发现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忽略了或根本就没被解释。
2.3 发现原因
再次打开研究default.conf,这个文件中写了两个server,第一个server是端口80,刚才一直在这个server内容里改来改去,后面其实还有第二个server,一直被无视。这次注意到第一个server里有一句话:
rewrite ^(.*)$ https://$host$1 permanent;
这是把http重定向到https了,看下一个server,果然端口是443。 至此,终于明白了,原来第一个80端口的server把所有请求转给443端口的server了。
2.4 问题解决
于是,把上面的location段落,移到下面这个443端口的server里,重启nginx。 再次测试phpinfo,问题解决。
|