问题一:nginx虚拟域名打开是下载而不是打开网页
配置Nginx服务器之后,打开虚拟域名,是直接下载而不是直接打开网页,是因为配置的Nginx无法解析PHP的原因。
1.打开nginx.conf配置文件,我的如下(与解析PHP相关的片段):
红圈那句话很重要,指明nginx与fastcgi交互的id和端口号,也就是fastcgi监听的端口。
location ~ \.php$ 表示匹配到php文件就进行fastcgi操作。
location / {}表示请求根路径时, 都会走这里。第一个$uri表示index.php(入口文件),第二个$uri表示真实路径,/index.php 表示前面都没有的话访问index.php,$args:所有参数。如果要处理url美化时,必须要配置这里。
2.检查127.0.0.1:9000端口是否处于监听状态,执行netstat -antp,发现并没有被监听,说明需要启动。
3.执行php-cgi -b 127.0.0.1:9000 & 启动之后,在执行netstat -antp结果:
4.重启Nginx,发现问题已经解决。
systemctl restart nginx
问题二:无法解析php文件,状态码显示200,但显示空白页
1、Nginx配置,将收到的以.php结尾的文件转发至php-fpm解析,最初的配置如下:
location ~ .php$ { #匹配规则
fastcgi_pass 127.0.0.1:9000; #交由fastcgi(php-fpm)处理
fastcgi_index index.php;
include fastcgi_params;
}
在加完这个配置后,自动Nginx和php-fpm发现都没有报错,在网页根目录创建index.php文件
<?php phpinfo(); ?>
访问时确出现了问题,状态码为200,但没有页面显示。
将Nginx配置修改后:
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和php-fpm后便能正常显示php页面了。后来将 include fastcgi_params; 这一项删掉保留上一项,发现php网页也显示空白页。
在查阅资料后大致原因是:在Nginx+php-fpm的组合中,Nginx将php交由php-fpm处理时需要使用 fastcgi_params 中的内建参数来解析处理请求。
安装完成Nginx后会自动生成 fastcgi_params 文件。
查看Nginx中 fastcgi_params 的具体参数:
[root@localhost ~]# cat /etc/nginx/fastcgi_params
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param DOCUMENT_URI $document_uri;
fastcgi_param DOCUMENT_ROOT $document_root;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param REQUEST_SCHEME $scheme;
fastcgi_param HTTPS $https if_not_empty;
fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;
fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;
原来在yum安装Nginx后默认配置中并没有 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 这一项,而这一项的意思是指脚本文件请求的路径,也就是说当访问127.0.0.1/index.php的时候,需要读取网站根目录下面的index.php文件,如果没有配置这一配置项时,nginx不回去网站根目录下访问.php文件,所以返回空白
所以若默认 fastcgi_params 中若有 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 参数,则在Nginx配置中只需要加 include fastcgi_params; 这一项即可;若默认配置中没有则可以单独加上。