很多用户都希望使用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
您的站点配置文件(i,e :)中的参数匹配/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。两者之间的区别是变量的定义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页面)。