PHP-FPM là gì? Tăng tốc độ website với PHP-FPM
Lượt xem : 491 - Ngày đăng : 01/12/2022
PHP-FPM cho phép bạn tăng tốc PHP lên nhiều lần, điều này đặc biệt phù hợp với các máy chủ web có lượng truy cập lớn. Bài viết này giải thích sâu về PHP-FPM là gì, cách thức hoạt động của PHP-FPM và cách cách tăng tốc độ website với PHP-FPM. Mời bạn đọc tiếp!
Tóm Tắt Bài Viết
PHP-FPM là gì?
PHP-FPM là phần mềm phiên dịch PHP được sử dụng phổ biến nhất hiện nay
PHP-FPM là viết tắt của FastCGI Process Manager. Nó là một chương trình có chức năng thông dịch PHP khi chạy các trang web trên máy chủ web. PHP-FPM được tạo ra dựa trên phần mở rộng CGI và hiện đang là sự lựa chọn của nhiều người dùng.
Về cơ bản, chức năng của PHP-FPM là tối ưu hóa việc xử lý dữ liệu của máy chủ web, hỗ trợ xử lý dữ liệu nhanh nhất của nhiều trang web cùng một lúc. PHP-FPM dần “soán ngôi” từ Apache FastCGI nổi tiếng với tốc độ xử lý script PHP nhanh và tối ưu hóa cho các website lớn, tăng lượng truy cập.
CGI là gì?
CGI viết tắt của Common Gateway Interface là một phần mềm lập trình có chức năng kết nối giữa máy chủ và chương trình, dựa trên các định dạng đặc tả thông tin.
Ngoài ra, CGI còn chịu trách nhiệm tạo chương trình từ các trang web. Sau khi nhận dữ liệu từ trang web ở định dạng HTML, phần mềm này sẽ gửi dữ liệu đến máy tính của người dùng thông qua cổng thông tin Internet
FastCGI là gì?
FastCGI là một giao thức phát triển CGI mở rộng. Mục đích chính của FastCGI là tối ưu hóa quá trình xử lý của máy chủ web. Đồng thời, máy chủ có thể xử lý cùng lúc nhiều yêu cầu từ website. FastCGI chạy với ít tài nguyên CPU hơn và gần với tốc độ DSO. FastCGI sử dụng bộ đệm opcode như eAccelerator để tải trang web nhanh hơn.
Các loại PHP Handler khác
Nếu chỉ biết về “PHP-FPM là gì?” hay “định nghĩa của CGI” hay “FastCGI là gì?”, bạn sẽ không thực sự hiểu cách thức hoạt động của nó. Để làm điều đó, bạn cần phải biết thêm một số PHP Handler khác. Bao gồm:
Một số PHP Handler khác.
DSO là gì?
DSO được gọi là mod_php và là phiên bản cấu hình cũ của PHP Handler. Tuy nhiên, DSO là handler nhanh nhất. Nó sử dụng PHP như một mô-đun Apache. Điều này có nghĩa là các tập lệnh PHP sẽ chạy dưới người dùng Apache. Đó là user ‘nobody’.
Nhược điểm của DSO:
+ Tất cả các tệp được tạo bởi tập lệnh PHP đều thuộc quyền sở hữu của user ‘nobody’. Nó không thể được đọc trực tuyến. Điều này khá phổ biến đối với người dùng WordPress. Nếu họ sử dụng tính năng upload file qua giao diện WordPress hoặc tính năng tự động cập nhật thì DSO sẽ bị lỗi.
+ Vấn đề bảo mật: Điều này xảy ra do tạo các tệp có tên người dùng là “nobody”. Điều gì sẽ xảy ra nếu tin tặc tìm thấy lỗ hổng trong tập lệnh PHP? Họ có thể thực thi một tệp có cùng quyền với các tệp hệ thống được đánh dấu là “nobody”. Điều này cho phép tin tặc sửa đổi các tệp hệ thống khác. Để chống lại điều này, PHP phải được cập nhật thường xuyên lên các phiên bản mới nhất.
SuPHP là gì?
SuPHP cũng sử dụng PHP làm mô-đun CGI. SuPHP khác với CGI ở chỗ các tập lệnh PHP được gọi bởi máy chủ web được thực thi bởi người dùng sở hữu các tập lệnh PHP đó. SuPHP thường là trình xử lý mặc định và cPanel khuyên dùng nó để chạy PHP. Với SuPHP, bạn có thể xem người dùng nào đang chạy tập lệnh PHP.
Ưu điểm của suPHP:
Khi bạn sử dụng công cụ để tải tệp lên trang web của mình, những tệp đó sẽ được cấp quyền phù hợp cho người dùng đó. Tải lên và một số tính năng khác của WordPress sẽ không hoạt động nếu không có suPHP hoặc FastCGI.
Ưu điểm của suPHP
SuPHP cũng mang lại lợi thế về bảo mật so với DSO hoặc CGI. Mọi tập lệnh PHP không thuộc sở hữu của một người dùng cụ thể sẽ không chạy. Hoặc người dùng này không thể chạy tập lệnh PHP của người dùng khác. Sau khi tài khoản bị đánh cắp, các tập lệnh không thể lây lan sang các tài khoản khác.
Nhược điểm của SuPHP:
+ Sử dụng CPU cao.
+ Opcode Cache (như xCache) không thể sử dụng với suPHP.
+ Bạn có thể quay lại sử dụng DSO hoặc FastCGI khi sử dụng SuPHP nếu CPU load cao.
Xem thêm: HTML5 là gì? Phát triển và thiết kế web vượt trội với HTML5
Cài đặt NGINX và PHP-FPM
Cấu hình NGINX
Bước 1: Để cài đặt cấu hình NGINX người dùng mở file cấu hình của NGINX tại mục /etc/nginx/nginx.conf
Bước 2: Xem thông số CPU Core theo công thức:
cat /proc/cpuinfo |grep processor
processor : 0
processor : 1
processor : 2
processor : 3
Bước 3: Dùng lệnh max_clients = worker_processes * worker_connections để thay đổi thông số worker_processes bằng với số lượng CPU core trong server bạn cấu hình.
Bước 4: Giới hạn kích thước từng phần của các http request bằng công thức:
client_max_body_size 20m;
client_body_buffer_size 128k;
Bước 5: Điều chỉnh lại các file tĩnh qua công thức:
location ~* .(jpg|jpeg|gif|png|css|js|ico|xml)$ {
access_log off;
log_not_found off;
expires 360d;
}
Bước 6: Cài đặt chuyển sang sử dụng unix socket cho việc truyền tải thông tin:
location ~* .php$ {
fastcgi_index index.php;
#Chinh tai day
fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
}
Bước 7: Cài đặt bỏ cho phép truy cập các file hoặc thư mục ẩn.
location ~ /. {
access_log off;
log_not_found off;
deny all;
}
Cấu hình PHP-FPM
Bước 1: Để cài đặt cấu hình PHP-FPM, người dùng mở file cấu hình của PHP-FPM tại mục /etc/php-fpm.d.
Bước 2: Điều chỉnh đường dẫn file sock theo công thức:
listen = /var/run/php-fpm/php-fpm.sock
user = site
group = site
request_slowlog_timeout = 5s
slowlog = /var/log/php-fpm/slowlog-site.log
listen.allowed_clients = 127.0.0.1
pm = dynamic
pm.max_children = 5
pm.start_servers = 3
pm.min_spare_servers = 2
pm.max_spare_servers = 4
pm.max_requests = 200
listen.backlog = -1
pm.status_path = /status
request_terminate_timeout = 120s
rlimit_files = 131072
rlimit_core = unlimited
catch_workers_output = yes
env[HOSTNAME] = $HOSTNAME
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp
Bước 3: Xác định các thông số: pm.max_children ,pm.start_servers , pm.min_spare_servers và pm.max_spare_servers theo các công thức như sau:
pm.max_children = Số process con (child processes) tối đa được tạo (tương đương tổng số request có thể phục vụ).
pm.start_servers = Tổng số child processes được tạo khi khởi động php-fpm (được tính bằng công thức`min_spare_servers + (max_spare_servers – min_spare_servers) / 2` )
pm.min_spare_servers = Tổng số child process nhàn rỗi tối thiểu được duy trì.
pm.max_spare_servers = Tổng số child process nhàn rỗi tối đa được duy trì.
Bảo mật PHP-FPM/Nginx trong môi trường Shared Hosting
Bảo mật PHP-FPM/Nginx trong môi trường Shared Hosting giúp quá trình sử dụng được dễ dàng hơn
Bảo mật PHP-FPM/Nginx trong môi trường lưu trữ chia sẻ là rất quan trọng. Khi chạy một trang web PHP, người dùng phải xác định một nhóm cho mỗi trang web để chạy các tập lệnh PHP dưới dạng một hoặc nhóm người dùng được xác định ở đó.
Công việc này không chỉ đóng vai trò quan trọng trong quá trình bảo mật mà còn giúp quá trình sử dụng dễ dàng và thuận tiện hơn. Vì khi tạo pool, người dùng có thể sử dụng tất cả các hàm suPHP cho PHP-FPM/Nginx. Bạn không cần cài đặt FTP và không có sự cố không mong muốn nào xảy ra khi sử dụng các tập lệnh PHP không thuộc về một người dùng hoặc nhóm cụ thể.
Trên thực tế, mô hình Shared Hosting chỉ phù hợp với các landing page. Vì vậy, nếu bạn đang sử dụng shared hosting cho website của mình, BKNS khuyên bạn nên chuyển sang cloud hosting. Vì lưu trữ đám mây an toàn hơn Shared Hosting và có thể mở rộng, nên hiệu suất cũng tốt hơn nhiều so với Shared Hosting.
Tổng kết PHP-FPM là gì?
Hi vọng qua bài viết trên của BKNS, các bạn đã có được những thông tin cần thiết về PHP-FPM và những lời khuyên về cách tối ưu hóa website của mình trên phần mềm này! Chúc các bạn luôn luôn thành công!
Cảm ơn bạn đã đón đọc bài viết. Có thể bạn cũng quan tâm đến:
>> Hướng dẫn cách tạo 2 website trên 1 hosting siêu dễ
>> TOP 5 cách thêm nút gọi điện cực đơn giản cho WordPress
>> Hướng dẫn cách trỏ Domain về Hosting cPanel
Theo dõi BKNS thường xuyên hơn tại các nền tảng mạng xã hội:
>> Fanpage: https://www.facebook.com/bkns.vn
>> Youtube: https://www.youtube.com/c/BknsVn1
>> Pinterest: https://www.pinterest.com/bknsvn/
>> LinkedIn: https://www.linkedin.com/company/bkns-vn/
[mautic type=”form” id=”6″]