Nginx 访问 PHP 文件空白(设置正确的 Nginx 解析 PHP 配置)

1,612 阅读1分钟

Nginx 访问 html 文件正常,但是访问 php 文件空白,状态码 200,也没有错误日志信息,经过排查后是因为 Nginx 的 PHP、fastcgi 的配置问题。

系统环境

  • Linux CentOS7
  • nginx/1.12.0
  • PHP 7.1.6

交代

  • 访问 html 文件正常
  • 访问 php 文件空白、状态码 200、无错误日志
  • 系统执行了 yum -y update
  • 进行了 HTTPS 部署
  • 出现问题的是新增的第二个站点,第一个站点未发生故障

问题修复

经过排查,是因为 Nginx 中的 PHP 配置。

出错时的配置

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;
}

需要修改成的配置

location ~ \.php$ {
   fastcgi_pass   127.0.0.1:9000;
   fastcgi_index  index.php;
   include        fastcgi.conf;
}

修改的地方是两处

  • 去掉 fastcgi_param
  • 把 include 的 fastcgi_params 改为 fastcgi.conf

重启 Nginx 后,一切正常了。

fastcgi.conf 这样的一个配置增加在于硬编码的问题,有兴趣的可以 vimdiff fastcgi.conf fastcgi_params 看看两个文件的区别。

相关资料

Nginx 的 fastcgi_params、fastcgi.conf 的配置历史英文博文 fastcgi_params Versus fastcgi.conf - Nginx Config History