问题一:nginx虚拟域名打开是下载而不是打开网页

配置Nginx服务器之后,打开虚拟域名,是直接下载而不是直接打开网页,是因为配置的Nginx无法解析PHP的原因。

1.打开nginx.conf配置文件,我的如下(与解析PHP相关的片段):

nginx解决恶意解析 nginx无法解析php文件_nginx解决恶意解析

红圈那句话很重要,指明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结果:

nginx解决恶意解析 nginx无法解析php文件_Nginx_02

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; 这一项即可;若默认配置中没有则可以单独加上。