许多用户都希望在使用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.
关于/etc/nginx/sites-enabled/default的location部分:
# 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;
}
检查位于/etc/nginx/的文件snippets/fastcgi-php.conf存在:
$ 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
<?php var_export($_SERVER)?>
其中/var/www/html是文档根目录的路径。
尽管如此,你仍然会看到一个空白文件,请确保你的php.ini启用了short_open_tag (如果你正在测试带有短标签的PHP页面)。