Nhiều người dùng rơi vào chủ đề này mong muốn tìm ra giải pháp cho các trang trống được hiển thị trong khi sử dụng nginx + php-fpm , tôi là một trong số họ. Đây là bản tóm tắt những gì tôi đã làm sau khi đọc nhiều câu trả lời ở đây cộng với các điều tra của riêng tôi (được cập nhật lên php7.2):
1) Mở /etc/php/7.2/fpm/pool.d/www.conf
và kiểm tra giá trị của tham số listen
.
listen = /var/run/php/php7.2-fpm.sock
2) Tham số listen
phải khớp với fastcgi_pass
tham số trong tệp cấu hình trang web của bạn (i, e /etc/nginx/sites-enabled/default
:).
fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
3) Kiểm tra tập tin thực sự tồn tại:
$ file /var/run/php/php7.2-fpm.sock
/var/run/php/php7.2-fpm.sock: socket
4) Nếu nó không tồn tại có nghĩa là php7.2-fpm không chạy, vì vậy bạn cần khởi động lại nó:
$ sudo /etc/init.d/php7.2-fpm restart
[ ok ] Restarting php7.2-fpm (via systemctl): php7.2-fpm.service.
Liên quan đến location
phần trong /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;
}
Kiểm tra tệp snippets/fastcgi-php.conf
tồn tại tại vị trí /etc/nginx/
:
$ file /etc/nginx/snippets/fastcgi-php.conf
/etc/nginx/snippets/fastcgi-php.conf: ASCII text
Tệp này chứa danh sách các định nghĩa biến được yêu cầu bởi php7.2-fpm. Các biến được định nghĩa trực tiếp hoặc thông qua bao gồm một tệp riêng biệt.
include fastcgi.conf;
Tập tin này được đặt tại /etc/nginx/fastcgi.conf
và nó trông giống như:
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
...
fastcgi_param REDIRECT_STATUS 200;
nginx bao gồm hai tệp tham số có thể: fastcgi_params và fastcgi.conf . Sự khác biệt giữa cả hai là định nghĩa của biến SCRIPT_FILENAME
:
$ diff fastcgi_params fastcgi.conf
1a2
> fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
Để làm cho một câu chuyện dài ngắn, fastcgi.conf phải luôn hoạt động. Nếu vì lý do nào đó bạn thiết lập đang sử dụng fastcgi_params , bạn nên xác định 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;
}
Bây giờ tải lại cấu hình nginx:
$ sudo nginx -s reload
Và kiểm tra một tập tin php được hiển thị chính xác. Ví dụ:
/var/www/html/test.php
<pre><?php var_export($_SERVER)?></pre>
Đâu /var/www/html
là đường dẫn đến thư mục gốc.
Nếu bất chấp tất cả, bạn vẫn thấy một tệp trống, hãy đảm bảo rằng bạn php.ini
đã short_open_tag
bật (nếu bạn đang kiểm tra trang PHP bằng các thẻ ngắn).