Hướng dẫn dùng php-fpm listen.backlog trong PHP

PHP-FPM là gì?

PHP-FPM viết tắt của FastCGI Process Manager là chương trình có chức năng phiên dịch PHP khi chạy trang web cho web server. PHP-FPM được hình thành dựa trên sự mở rộng của CGI và hiện đang được đông đảo người dùng lựa chọn. Chức năng của PHP-FPM là gì? Cùng Mắt Bão tìm hiểu nhé!

Hướng dẫn dùng php-fpm listen.backlog trong PHP
PHP-FPM là phần mềm phiên dịch PHP được sử dụng phổ biến nhất hiện nay

Về cơ bản, PHP-FPM có chức năng tối ưu quá trình xử lý thông tin của các máy chủ web, hỗ trợ việc xử lý thông tin từ nhiều trang web trong cùng một khoảng thời gian một cách nhanh nhất.

Với tốc độ xử lý PHP script nhanh cùng tính năng tối ưu hoá cho những trang web có kích thước lớn, giúp tăng lượng truy cập, PHP-FPM đang dần “soán ngôi” Apache + FastCGI quen thuộc.

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.

Hướng dẫn dùng php-fpm listen.backlog trong PHP
CGI là một phần mềm lập trình đầu tiên trong việc tạo lập trang web động

Bên cạnh đó, phần mềm lập trình CGI còn có nhiệm vụ xây dựng chương trình từ các trang web. Sau khi nhận dữ liệu từ các trang web dưới định dạng HTML, phần mềm này sẽ truyền dữ liệu đó qua cổng thông tin Internet đến máy tính của người dùng.

FastCGI là gì?

FastCGI là một giao thức phát triển mở rộng từ CGI. Mục đích chính của FastCGI là để web server tối ưu trong việc xử lý. Đồng thời giúp máy chủ có thể xử lí nhiều yêu cầu từ trang web trong cùng một lúc.

FastCGI sẽ chạy ít tốn tài nguyên CPU hơn và đạt tốc độ gần bằng DSO. FastCGI sử dụng được opcode cacher như eAccelerator để load web nhanh hơn.

Hướng dẫn dùng php-fpm listen.backlog trong PHP

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:

DSO là gì?

DSO được biết như là mod_php và là một phiên bản cấu hình cũ của PHP Handler. Tuy nhiên DSO lại là Handler nhanh nhất. Nó chạy PHP như một Apache Module. Điều đó có nghĩa là các PHP Script sẽ chạy dưới quyền của Apache user. Đó là user ‘nobody’.

Nhược điểm của DSO:

  • Tất cả file được tạo ra từ PHP script sẽ được sở hữu bởi user ‘nobody’. Nó sẽ không có khả năng đọc được từ web. Điều này khá phổ biến với người dùng WordPress. Nếu họ dùng tính năng upload file thông qua WordPress Interface hay dùng tính năng auto update thì sẽ bị fail với DSO.
  • Vấn đề bảo mật: Điều này nằm ở việc tạo file sẽ dưới danh nghĩa người dùng ‘nobody’. Sẽ ra sao nếu một hacker tìm được một lỗ hổng trong PHP script? Họ có thể thực thi một file cùng một quyền hạn như những file hệ thống mà được đánh dấu sở hữu là ‘nobody’. Điều này làm hacker có khả năng chỉnh sửa các file hệ thống khác. Để chống lại điều này thì phải thường xuyên update PHP lên các phiên bản mới nhất.

SuPHP là gì?

SuPHP cũng chạy PHP như CGI module. SuPHP khác với CGI vì PHP scripts được gọi từ web Server sẽ được chạy dưới quyền của user sở hữu PHP scripts đó. SuPHP thông thường là một handler mặc định và được khuyến cáo bởi cPanel để chạy PHP. Với suPHP bạn sẽ có thể thấy user nào đang chạy đoạn PHP script.

Ưu điểm của suPHP:

  • Khi bạn sử dụng công cụ upload file lên website của bạn, các file này sẽ được phân đúng quyền hạn của user đó. Upload và một vài tính năng khác của WordPress không hoạt động nếu không sử dụng suPHP hoặc FastCGI
  • SuPHP cũng cung cấp một lợi thế bảo mật hơn là DSO hay CGI. Tất cả những PHP Scripts không thuộc một user cụ thể nào đó sẽ không thể  thực thi được. Hoặc user này sẽ không thể nào thực thi được các PHP Scripts của user khác. Khi một tài khoản nào đó bị đánh cắp, các scripts cũng không thể nào lây lan sang các tài khoản khác được.

Nhược điểm của suPHP:

  • Sử dụng CPU cao.
  • Bạn không thể sử dụng Opcode Cache (như xCache) với suPHP.
  • Khi sử dụng suPHP nếu CPU load cao bạn có thể chuyển lại dùng DSO hoặc FastCGI.

So sánh PHP-FPM với CGI

Hướng dẫn dùng php-fpm listen.backlog trong PHP
PHP-FPM và CGI đều là những phần mềm có chức năng kết nối giữa server và chương trình

Điểm khác nhau giữa CGI và PHP-FPM là gì? Cả PHP-FPMCGI đều là những phần mềm có chức năng xây dựng trên web cho máy chủ khi truy cập internet được sử dụng tương đối phổ biến. Tuy nhiên, giữa 2 phần mềm này cũng có những ưu điểm và nhược điểm riêng như sau:

Ưu và nhược điểm của PHP-FPM là gì?

Hướng dẫn dùng php-fpm listen.backlog trong PHP
FastCGI có ưu điểm lớn nhất là hiệu suất cao, ổn định và tính bảo mật tuyệt đối

Ưu điểm của PHP-FPM là gì?

Tính năng vượt trội nhất của FastCGI là hiệu suất cao, sự ổn định và tính bảo mật cao hơn nhiều so với CGI. Phần mềm này có thể chạy PHP Script dưới quyền sở hữu PHP Scripts đó.

Ngoài ra, một ưu điểm khác khiến FastCGI ngày càng được sử dụng rộng rãi là khai thác rất ít tài nguyên CPU khi chạy chương trình. Vì vậy, FastCGI giúp tốc độ tải trang nhanh hơn, việc truy cập của người dùng trở nên dễ dàng, từ đó lưu lượng truy cập trang web sẽ tăng cao hơn.

Nhược điểm của PHP-FPM là gì?

Tuy nhiên, phần mềm này cũng có một khuyết điểm khá lớn chính là tiêu tốn dung lượng bộ RAM. Tuy nhiên, những lợi ích vượt trội mà phần mềm này mang lại là không thể phủ nhận, do đó nếu người dùng có nhu cầu tạo ra một trang web có tốc độ tải cực nhanh cùng tính bảo mật cao, lại ít tốn tài nguyên CPU thì FastCGI chính là một sự lựa chọn hàng đầu.

Ưu và khuyết điểm của CGI so với PHP-FPM là gì?

Hướng dẫn dùng php-fpm listen.backlog trong PHP
Ưu điểm vượt trội của CGI là có thể chạy độc lập trên máy chủ sử dụng bất kỳ ngôn ngữ nào

Ưu điểm của CGI so với PHP-FPM là gì?

CGI là một cái tên quen thuộc trong số các ngôn ngữ lập trình hiện nay. Đây được xem như công cụ đầu tiên được sử dụng để tạo ra các trang web động. Có thể xem CGI như một giao thức có chức năng kết nối máy chủ với các chương trình bên ngoài.

Một ưu điểm vượt trội của CGI là có thể chạy độc lập trên máy chủ sử dụng bất kỳ ngôn ngữ nào. Từ Python, Tcl, C/C + + đến cả Java (chạy PHP dưới quyền truy cập user ‘nobody’)

Nhược điểm của CGI so với PHP-FPM là gì?

Tuy nhiên, khuyết điểm lớn nhất của CGI khiến cho phần mềm này ngày càng mất đi vị thế của nó trên thị trường nằm ở hiệu suất thấp. Theo đó, khi sử dụng CGI, khi có yêu cầu truy cập trang web động, chương trình này sẽ thực hiện khởi tạo tiến trình mới. Điều này dẫn đến việc tiêu tốn tài nguyên CPU cũng như làm giảm tốc độ truy cập web.

Tuy nhiên, các lập trình viên đã có thể khắc phục tình trạng này bằng cách tích hợp sẵn khả năng xử lý tạo nội dung web động, bên cạnh đó người dùng cũng có thể sử dụng các module hỗ trợ khác kèm theo khi kết nối với máy chủ web.

Cài đặt NGINX và PHP-FPM

Hướng dẫn dùng php-fpm listen.backlog trong PHP
Cần tuân thủ các bước khi cài đặt NGINX và PHP-FPM để đạt được hiệu quả lớn nhất

Trước khi bắt đầu, nếu chưa thực sự hiểu về NGINX, bạn nên xem qua bài viết “NGINX là gì?“.

NGINX là một phần mềm web server mã nguồn mở, sử dụng kiến trúc hướng sự kiện (event-driven) không đồng bộ (asynchronous). Mục tiêu ban đầu để phục vụ HTTP cache nhưng sau được áp dụng vào reverse proxyHTTP load balancer và các giao thức truyền mail như IMAP4, POP3, và SMPT.

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ệnhmax_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_serverspm.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

Hướng dẫn dùng php-fpm listen.backlog trong PHP
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

Vấn đề bảo mật PHP-FPM/Nginx trong môi trường Shared Hosting là một điều vô cùng quan trọng. Khi truy cập một trang web PHP, người dùng cần thiết lập một Pool cho từng website để các script PHP thực thi như một hoặc một nhóm người dùng được định nghĩa trong đó.

Công việc này không chỉ có vai trò quan trọng trong quá trình bảo mật, mà còn đảm bảo quá trình sử dụng được dễ dàng, thuận lợi hơn. Vì khi tạo lập một Pool, người dùng có thể sử dụng tất cả tính năng trên suPHP cho PHP-FPM/Nginx. Bạn không cần cài đặt bất kỳ FTP nào, cũng như những sự cố bất ngờ có thể xảy ra do sử dụng các script PHP không thuộc sở hữu của một hoặc một nhóm người dùng riêng biệt.

Bạn cũng nên tìm hiểu thêm về các chuyên mục sau:

  • Shared Hosting trong bài viết “Hosting là gì?“.
  • Giao thức FTP trong bài viết “FTP là gì?“.
  • Landing Page là gì?

Thực tế hiện nay, mô hình Shared Hosting chỉ phù hợp với các landing page. Do đó nếu bạn đang sử dụng Shared Hosting cho website của mình, Mắt Bão khuyên bạn nên chuyển qua mua Cloud Hosting. Bởi Cloud Hosting bảo mật hơn Shared Hosting và khả năng mở rộng, up-time cũng tốt hơn nhiều so với Shared Hosting.

Tổng kết PHP-FPM là gì?

Trên thị trường ngày nay, có rất nhiều các ngôn ngữ lập trình khác nhau, tuỳ theo nhu cầu sử dụng cũng như cấu hình máy mà người dùng cần có sự lựa chọn sao cho phù hợp và đạt hiệu quả tối ưu nhất. Với PHP-FPM, việc giải bài toàn “phiên dịch” ngôn ngữ và tốc độ tải trang đã không còn là việc quá xa vời. Đó là lý do vì sao các nhà cung cấp dịch vụ cho thuê máy chủ hiện nay đều tích hợp PHP-FPM vào server của mình.

Qua bài viết trên, hy vọng các bạn có thể rút ra cho mình những kiến thức cần thiết về PHP-FPM cũng như những thủ thuật nhằm tối ưu hoá trang web của mình dựa trên phần mềm này!