Многие пользователи попадают в эту ветку, ожидая найти решение для отображения пустых страниц при использовании 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 с короткими тегами).