许多用户陷入此线程,希望找到在使用nginx+php-fpm时显示空白页面的解决方案,我就是其中之一。这是我在阅读了这里的许多答案以及我自己的调查(更新到 php7.2)后最终所做的事情的回顾:
1)打开/etc/php/7.2/fpm/pool.d/www.conf
并检查参数的值listen
。
listen = /var/run/php/php7.2-fpm.sock
2) 参数listen
应与fastcgi_pass
站点配置文件中的参数匹配(即:)/etc/nginx/sites-enabled/default
。
fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
3)检查文件是否真的存在:
$ file /var/run/php/php7.2-fpm.sock
/var/run/php/php7.2-fpm.sock: socket
4)如果它不存在则意味着php7.2-fpm没有运行,所以你需要重新启动它:
$ sudo /etc/init.d/php7.2-fpm restart
[ ok ] Restarting php7.2-fpm (via systemctl): php7.2-fpm.service.
关于中的location
部分/etc/nginx/sites-enabled/default
:
# pass PHP scripts to FastCGI server
#
location ~ \.php$ {
include snippets/fastcgi-php.conf;
# With php-fpm (or other unix sockets):
fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
}
检查文件是否snippets/fastcgi-php.conf
存在于位置/etc/nginx/
:
$ file /etc/nginx/snippets/fastcgi-php.conf
/etc/nginx/snippets/fastcgi-php.conf: ASCII text
此文件包含 php7.2-fpm 所需的变量定义列表。这些变量是直接定义的,或者通过包含一个单独的文件来定义。
include fastcgi.conf;
该文件位于,/etc/nginx/fastcgi.conf
它看起来像:
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
...
fastcgi_param REDIRECT_STATUS 200;
nginx包括两个可能的参数文件:fastcgi_params和fastcgi.conf。两者的区别在于 variable 的定义SCRIPT_FILENAME
:
$ diff fastcgi_params fastcgi.conf
1a2
> fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
长话短说,fastcgi.conf应该总是有效的。如果由于某种原因您设置使用fastcgi_params,您应该定义SCRIPT_FILENAME
:
location ~ \.php$ {
include snippets/fastcgi-php.conf;
# With php-fpm (or other unix sockets):
fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
现在重新加载 nginx 配置:
$ sudo nginx -s reload
并检查一个 php 文件是否正确显示。例如:
/var/www/html/test.php
<pre><?php var_export($_SERVER)?></pre>
/var/www/html
文档根目录的路径在哪里。
如果尽管如此,您仍然看到一个空白文件,请确保您php.ini
已short_open_tag
启用(如果您正在测试带有短标签的 PHP 页面)。