Skip to content
VDS · Website và máy chủ web

PHP-FPM: các trang web PHP

Cài đặt PHP-FPM trên VDS, tích hợp với Nginx, chọn số tiến trình theo bộ nhớ của tier, và khắc phục lỗi 502 và 504.

Cập nhật 23 tháng 8, 2026

PHP-FPM là một dịch vụ riêng biệt thực thi mã PHP; máy chủ web chỉ chuyển tiếp yêu cầu đến nó. WordPress, Laravel, Bitrix và gần như mọi thứ khác chạy trên PHP đều hoạt động theo cách này.

Cài đặt

apt update
apt install -y php-fpm php-mysql php-curl php-gd php-mbstring php-xml php-zip
systemctl enable --now php8.3-fpm

Trên AlmaLinux và CentOS Stream, dùng dnf install -y php-fpm php-mysqlnd ...; dịch vụ có tên php-fpm. Để kiểm tra phiên bản chính xác, chạy:

php -v
systemctl list-units | grep fpm

Kết nối với Nginx

server {
    listen 80;
    server_name example.ru;
    root /var/www/example.ru/public;
    index index.php index.html;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

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

    location ~ /\.(?!well-known) { deny all; }
}
nginx -t && systemctl reload nginx
echo '<?php phpinfo();' > /var/www/example.ru/public/info.php

Mở /info.php, đảm bảo PHP hoạt động, rồi xóa tệp này ngay: nó để lộ phiên bản, đường dẫn và danh sách module.

Nên giữ bao nhiêu tiến trình

Mỗi tiến trình worker PHP ngốn 40–120 MB. Hãy chọn theo tier, chừa bộ nhớ cho cơ sở dữ liệu và hệ thống. Cấu hình này nằm trong /etc/php/8.3/fpm/pool.d/www.conf:

TierBộ nhớpm.max_children hợp lý
VDS-12 GB5
VDS-24 GB10
VDS-38 GB20
VDS-524 GB60
pm = dynamic
pm.max_children = 10
pm.start_servers = 2
pm.min_spare_servers = 2
pm.max_spare_servers = 4
pm.max_requests = 500

pm.max_requests khởi động lại một tiến trình sau N yêu cầu, nhờ đó rò rỉ bộ nhớ trong mã không tích tụ đến cuối tuần.

Các giá trị php.ini hữu ích cho FPM: memory_limit = 256M, upload_max_filesize = 64M, post_max_size = 64M, opcache.enable = 1.

Sau khi thay đổi: systemctl reload php8.3-fpm.

Lỗi thường gặp

Triệu chứngNguyên nhânCần làm gì
502 Bad GatewaySai đường dẫn socket hoặc dịch vụ không chạyKiểm tra fastcgi_pass với tệp thực tế trong /run/php/
504 Gateway Time-outScript chạy lâu hơn thời gian chờTăng fastcgi_read_timeout và max_execution_time
Trình duyệt tải tệp xuống thay vì thực thiKhối location ~ \.php$ không khớpKiểm tra thứ tự các khối location và chạy nginx -t
server reached pm.max_children trong logKhông đủ tiến trìnhTăng giới hạn nếu bộ nhớ cho phép, nếu không thì nâng lên tier cao hơn

Log: /var/log/php8.3-fpm.log và /var/log/nginx/error.log.

Hãy tạo cơ sở dữ liệu của site dưới một người dùng riêng chỉ có quyền với schema của chính nó — người dùng và quyền. Dùng tài khoản root trong cấu hình CMS là con đường thẳng dẫn đến mất toàn bộ cơ sở dữ liệu cùng một lúc.