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