Website được thiết kế tối ưu cho thành viên chính thức. Hãy Đăng nhập hoặc Đăng ký để truy cập đầy đủ nội dung và chức năng. Nội dung bạn cần không thấy trên website, có thể do bạn chưa đăng nhập. Nếu là thành viên của website, bạn cũng có thể yêu cầu trong nhóm Zalo "CNTT" các nội dung bạn quan tâm.

27. Cấu hình PHP-FPM cho Nginx

ICT

1. Vì sao cấu hình Nginx ↔ PHP-FPM hay gây lỗi?

Trong thực tế vận hành Web Server, lỗi phổ biến nhất sau khi cài PHP là:

  • 502 Bad Gateway

  • Website trắng trang

  • File PHP bị download thay vì thực thi

  • PHP chạy lúc được lúc không

Nguyên nhân thường không phải do PHP “hỏng”, mà do:

Nginx và PHP-FPM chưa được kết nối đúng cách.

Bài này tập trung vào:

  • Kết nối Nginx ↔ PHP-FPM chuẩn

  • Cấu hình tối thiểu nhưng đủ dùng

  • Tránh các lỗi cấu hình kinh điển


2. Nguyên tắc cấu hình PHP-FPM cho production

Trong loạt bài này, chúng ta tuân theo:

  1. Dùng Unix socket

  2. Không expose PHP-FPM ra Internet

  3. Cấu hình rõ ràng, dễ đọc

  4. Không “nhét” PHP logic vào Nginx

  5. Mỗi bước đều kiểm tra lại

Nguyên tắc:

Nginx chỉ chuyển request, PHP-FPM chỉ xử lý PHP.


3. Xác định socket PHP-FPM

Trước khi cấu hình, cần xác định chính xác socket.

Với PHP 8.2:

/run/php/php8.2-fpm.sock

Kiểm tra:

ls -l /run/php/

Nếu không thấy socket:

  • PHP-FPM có thể chưa chạy

  • Hoặc cài sai phiên bản


4. Cấu hình Nginx xử lý file PHP

4.1. Vị trí cấu hình

Mở file virtual host của website:

sudo nano /etc/nginx/sites-available/site.conf

4.2. Thêm block xử lý PHP

Trong server block HTTPS, thêm:

location ~ \.php$ {
   include snippets/fastcgi-php.conf;
   fastcgi_pass unix:/run/php/php8.2-fpm.sock;
}

Giải thích:

  • location ~ \.php$: bắt file PHP

  • fastcgi_pass: trỏ tới socket PHP-FPM

  • fastcgi-php.conf: cấu hình chuẩn của Ubuntu

Nguyên tắc:

Không tự viết lại fastcgi_param nếu chưa hiểu rõ.


5. Kiểm tra file fastcgi-php.conf

File mặc định nằm tại:

 
/etc/nginx/snippets/fastcgi-php.conf

Nội dung chính:

  • Thiết lập SCRIPT_FILENAME

  • Truyền biến môi trường đúng cho PHP

Không chỉnh file này trừ khi:

  • Có yêu cầu đặc biệt

  • Hiểu rõ tác động


6. Đảm bảo Nginx và PHP-FPM có quyền truy cập socket

6.1. Kiểm tra quyền socket

 
ls -l /run/php/php8.2-fpm.sock

Ví dụ:

srw-rw---- 1 www-data www-data ...

Nginx chạy bằng user:

www-data 

→ Quyền này là đúng và an toàn.


6.2. Nếu quyền sai

  • Không chmod 777

  • Không đổi owner bừa

Cần kiểm tra:

  • User chạy Nginx

  • User/group của PHP-FPM pool

Việc này sẽ được phân tích kỹ hơn ở bài cấu hình pool.


7. Test cấu hình PHP

7.1. Tạo file test PHP

Trong thư mục public của website:

nano /var/www/site/public/info.php

Nội dung:

<?php phpinfo();

7.2. Reload Nginx

sudo nginx -t sudo systemctl reload nginx

7.3. Truy cập kiểm tra

Truy cập:

https://domain/info.php

Nếu thấy trang thông tin PHP:

  • PHP-FPM đã hoạt động đúng

  • Nginx ↔ PHP-FPM kết nối thành công


8. Xóa file test sau khi kiểm tra

Sau khi test xong:

rm /var/www/site/public/info.php

Nguyên tắc:

Không để file phpinfo() trên production.


9. Các lỗi thường gặp và cách xử lý nhanh

9.1. 502 Bad Gateway

Kiểm tra:

  • PHP-FPM có chạy không:

    systemctl status php8.2-fpm
  • Socket có tồn tại không

  • fastcgi_pass đúng đường dẫn


9.2. File PHP bị download

Nguyên nhân:

  • Chưa cấu hình block .php

  • include sai file snippet


9.3. Permission denied

Nguyên nhân:

  • Quyền socket

  • Quyền thư mục web

Không xử lý bằng:

chmod 777

10. Checklist cấu hình PHP-FPM cho Nginx

  •  PHP-FPM đang chạy

  •  Xác định đúng socket

  •  fastcgi_pass trỏ đúng

  •  PHP file được thực thi

  •  File test đã xóa


11. Bài tiếp theo

Trong Bài 28, chúng ta sẽ đi sâu vào hiệu năng PHP:

Tối ưu PHP-FPM: pool, process, memory

Bài này sẽ giúp:

  • PHP chạy ổn định khi tải tăng

  • Tránh nghẽn tài nguyên

  • Không “đoán mò” khi tuning