Kiểm tra nhật ký/php-fpm

PHP-FPM cho phép tăng tốc PHP lên gấp nhiều lần, đặc biệt phù hợp với các web server lưu lượng truy cập lớn. Bài viết này sẽ đi sâu vào giải thích PHP-FPM là gì và cách hoạt động của PHP-FPM, đồng thời hướng dẫn cấu hình PH-FPM với cPanel và NGINX. Bạn hãy đọc tiếp nhé

Nội dung

  1. PHP-FPM là gì?
  2. Cách hoạt động của PHP-FPM
  3. Sự khác nhau giữa PHP-CGI và PHP-FPM
    1. PHP-CGI
    2. PHP-FPM
  4. Cách sử dụng PHP-FPM với cPanel và EasyApache
    1. Cấu hình PHP-FPM trong cPanel
    2. Cách hoạt động của module cPanel PHP-FPM là gì?
    3. Tạo nhóm người dùng trong PHP-FPM
  5. Cách cấu hình PHP-FPM với NGINX
    1. Cài đặt PHP-FPM
    2. Cấu hình PHP-FPM Pool
    3. Cấu hình NGINX cho PHP-FPM
    4. Kiểm tra cấu hình PHP-FPM NGINX
    5. PHP-FPM có tốt hơn không?
    6. FPM là viết tắt của từ gì trong PHP-FPM?
    7. WordPress có cần PHP-FPM không?
    8. Làm cách nào để bắt đầu PHP-FPM?
    9. PHP-FPM có an toàn không?
  6. Lời kết

PHP-FPM là gì?

Tóm tắt PHP-FPM của FastCGI Process Manager là một sự phát triển khai mở PHP giúp tăng tốc độ thực thi cho các ứng dụng web, đồng thời cho phép quản trị viên kiểm tra mức tiêu thụ tài nguyên trên máy chủ

PHP-FPM là gì?

Một triển khai PHP [còn được gọi là thời gian chạy] có nhiệm vụ phiên dịch và thực thi mã. Hệ thống truyền thời gian chạy như mod_PHP của Apache hoạt động bên trong máy chủ web. Trong quá trình khai triển này, mỗi kết nối tồn tại sẽ tiêu thụ một phần tài nguyên định mức cao nhất của máy chủ. Do đó, nếu có quá nhiều kết nối đồng thời, máy chủ có thể nhanh chóng tiêu diệt tài nguyên, ảnh hưởng nghiêm trọng đến hiệu suất của trang web

Mặt khác, PHP-FPM hành động bên ngoài máy chủ web và sử dụng một nhóm các quy trình để thực thi mã vận động [nhóm này thường được gọi là pool, và các quy trình này được gọi là worker process]. Các worker sẽ sẵn sàng chờ đợi các yêu cầu đến, đồng thời cho phép quản trị viên quản lý số lượng worker trong mỗi nhóm

Chương trình ưu đãi cuối năm tại Vietnix

Cách hoạt động của PHP-FPM

Cụ thể cách hoạt động của PHP-FPM như sau

  • Apache gửi mã đến PHP-FPM thông qua một giao diện nhị phân tốc độ cao, được gọi là FastCGI
  • Sau đó, người giám sát sẽ chọn công nhân từ trong nhóm rồi gán mã nhận được
  • Worker bây giờ đang thực thi mã và trả kết quả về cho Apache để chuyển đến trình duyệt web
  • Sau khi worker hoàn tất, nó sẽ quay lại pool và tiếp tục chờ thực thi mã

Nếu có quá nhiều kết nối đồng thời, đôi khi hệ thống phải đợi đến khi có bất kỳ công nhân nào có thể sử dụng được. Tuy nhiên, nó sẽ không bao giờ tiêu thụ toàn bộ tài nguyên của máy chủ, vì vậy hiệu quả hơn các phương pháp khác trên máy chủ web lớn

Sự khác nhau giữa PHP-CGI và PHP-FPM

Khi chạy PHP qua máy chủ web, có hai lựa chọn phổ biến là. run by CGI of PHP, or run as a PHP-FPM. Vậy hai cách này có gì khác nhau?

PHP-CGI

PHP-CGI là một giao thức truyền giữa một máy chủ web và một chương trình CGI. Một chương trình CGI là bất kỳ chương trình nào được thiết kế để nhận và trả về dữ liệu theo tiêu chuẩn CGI. Về cơ bản thì đây là một cách để chạy script side server [PHP, Perl, Python] khi có HTTP request

Việc chạy ứng dụng trên máy chủ web bằng cách thực thi script PHP với ứng dụng CGI rất kém hiệu quả và ít khi được sử dụng vì mỗi khi mã PHP cần được thực thi thì lại phải có một quy trình mới. Tuy nhiên, PHP sẽ đọc từng cài đặt khi người dùng tải một trang. Vì vậy nếu PHP chạy dưới dạng mô-đun, mọi thay đổi trong tệp php. ini sẽ không có hiệu lực khi người dùng khởi động lại máy chủ web. Vì vậy, CGI thường được sử dụng trong trường hợp người dùng cần kiểm tra nhiều cài đặt và xem các phản hồi tức thì của họ

Bên cạnh đó, việc chạy ứng dụng trên CGI là nó giữ cho việc thực thi mã được phân tách khởi động máy chủ web, giúp tăng thêm khả năng bảo mật cho hệ thống. Chẳng hạn, một tập lệnh PHP bị lỗi hoặc không được thực thi hoàn toàn qua PHP-CGI sẽ không thể ảnh hưởng đến việc bảo mật của bất kỳ tệp nào khác nằm ngoài miền mà nó được lưu trữ

ưu điểm

  • Bảo mật tốt hơn FPM vì mã được thực thi hoàn toàn độc lập với máy chủ web

nhược điểm

  • cost rate

PHP-FPM

Đây là một daemon FastCGI thay thế cho PHP, giúp các trang web có thể xử lý tải trọng nhanh hơn thông qua việc lưu trữ các pool. PHP-FPM nhanh hơn so với các phương pháp dựa trên CGI truyền thống như SUPHP. Ngoài ra, quá trình khai thác này cũng không làm quá tải bộ nhớ của hệ thống vì tiến trình Apache

Một số tính năng của PHP-FPM bao gồm có

  • Sơ đồ cơ sở dữ liệu [mod_status của Apache]
  • Cao cấp quản lý quy định
  • Khởi động worker bằng php. ini other nhau
  • Ghi nhật ký thiết bị xuất chuẩn & thiết bị xuất chuẩn
  • Khởi động lại khẩn cấp trong trường hợp vô tình làm hỏng bộ nhớ cache opcode
  • Tăng tốc độ tải lên
  • Hỗ trợ slowlog

ưu điểm

  • Cách chạy ứng dụng hiện đại, tối ưu
  • Hiệu suất mạnh mẽ, tiêu thụ tài nguyên thấp
  • Bộ nhớ dấu chân nhỏ hơn, tải lại dễ dàng mà không cần dừng các truy vấn khác

nhược điểm

  • Bảo mật kém hơn so với PHP-CGI
  • Cần cấu hình nhiều hơn PHP-CGI

Nói chung, nếu bạn sở hữu trang web có lưu lượng truy cập lớn và tài nguyên máy chủ thấp thì PHP-FPM sẽ là một lựa chọn hợp lý. Mặt khác, các trang web cơ bản nên sử dụng PHP-CGI vì khả năng thực thi mã PHP tốt hơn, đồng thời cũng không sử dụng quá nhiều tài nguyên của các trang web nhỏ

Cách sử dụng PHP-FPM với cPanel và EasyApache

Kích hoạt và cấu hình PHP-FPM trong cPanel & WHM tương đối đơn giản. Người dùng có thể tùy chọn miền sử dụng PHP-FPM và đặt các biến cấu hình có thể ảnh hưởng đến PHP-FPM

Trước hết, hãy bật System PHP-FPM trong MultiPHP Manager

Sau khi bật lên, WHM vẫn chưa kích hoạt PHP-FPM cho mọi miền có sẵn

Ta có thể buộc mọi tài khoản trên máy chủ sử dụng PHP-FPM bằng cách nhấp vào nút Convert All Accounts to PHP-FPM.  

Ngoài ra, ta cũng có thể kích hoạt PHP-FPM cho từng miền trong bảng ở cuối trang

Chọn tên miền rồi nhấn vào Bật trong trình đơn thả xuống như hình bên dưới

Cấu hình PHP-FPM trong cPanel

Sau khi kích hoạt PHP-FPM, ta có thể cấu hình cài đặt mặc định của hệ thống và cả cài đặt cho từng miền cụ thể trong MultiPHP Manager

Nhấp vào tab Cấu hình PHP-FPM hệ thống

Có ba cài đặt nhóm cho người dùng thay đổi. Các giá trị mặc định bao gồm

  • Yêu cầu tối đa. Yêu cầu số lượng mỗi công nhân nên thực hiện trước khi khởi động lại tự động. Cài đặt này giúp hạn chế sự cố rò rỉ bộ nhớ. Giá trị mặc định là 20 tương đối ổn với hầu hết các máy chủ lưu trữ web, nhưng ta nên đặt thành 40 hoặc 60 với các máy chủ có lưu lượng truy cập lớn
  • Quá trình hết thời gian nhàn rỗi. Xác định thời gian chờ của các worker rảnh rỗi [idle] trước khi tự động tắt. Các worker rảnh rỗi này mặc dù không tiêu thụ tài nguyên, nhưng chúng ta vẫn nên tắt các worker này sớm để giảm thời gian khởi động. Giá trị mặc định là 10, tương đối thấp với nhiều máy chủ có lưu lượng truy cập lớn
  • Số trẻ em tối đa. Số lượng công nhân tối đa trong mỗi nhóm, giá trị mặc định là 5

Có rất nhiều yếu tố ảnh hưởng đến các giá trị thiết lập tối ưu, bao gồm cả máy chủ mã chạy và lượng RAM mà hệ thống có

Cách hoạt động của module cPanel PHP-FPM là gì?

Giao diện của WHM có hầu hết các cấu hình cài đặt quan trọng, người dùng có thể tham khảo thêm trong tài liệu của PHP. Để bổ sung hoặc chỉnh sửa các cài đặt, ta cần chỉnh sửa tệp cấu hình trên dòng lệnh của máy chủ hoặc trong cPanel & Trình quản lý tệp WHM

Hai file config system quan trọng nhất là

  • /var/cpanel/ApachePHPFPM/hệ thống. khoai mỡ
  • /var/cpanel/ApachePHPFPM/system_pool_defaults. khoai mỡ

WHM không tạo ra các tệp này vì hệ thống không cần đến, tuy nhiên người dùng vẫn có thể dễ dàng tạo và thêm chỉ thị để ghi các tiêu đề thiết lập mặc định như sau

touch /var/cpanel/ApachePHPFPM/system.yaml
touch /var/cpanel/ApachePHPFPM/system_pool_defaults.yaml

Tạo thư mục

mkdir -p /var/cpanel/ApachePHPFPM/

Trong các tệp này, hãy nhập các lệnh khác để ghi đè lên lệnh mặc định của hệ thống. Hạn chế, nếu bạn muốn chuyển đổi Emergency_restart_threshold từ giá trị mặc định 0 thành 10 thì file system_pool_defaults. yaml sẽ có dạng như sau

Lưu ý. Trong tài liệu của PHP còn có một số chỉ thị được định dạng bằng dấu chấm [. ] hay nhiều ký tự khác. Khi thêm các chỉ thị vào tệp cấu hình, các ký tự này sẽ được thay thế bằng dấu “_”

Tạo nhóm người dùng trong PHP-FPM

Bây giờ chúng ta sẽ tìm hiểu cách tạo và cấu hình thủ công nhóm người dùng trong PHP-FPM. Đây là nhóm worker được sử dụng bởi trang host trên miền của server user

Mô-đun PHP-FPM tạo một nhóm công nhân cho một miền nếu nó được xác định là một tệp cấu hình trong

/var/cpanel/userdata/[user]/ihoctot.com.php_fpm.yaml

Trong đó, thay [user] và ihoctot.com thành các giá trị tương ứng của máy chủ. Ta có thể tạo tệp này hoặc kích hoạt PHP-FPM cho một tên miền cụ thể trong WHM để tạo tệp tự động

Cũng giống như các tệp hệ thống, ta có thể thêm chỉ thị để cấu hình nhóm người dùng. Sau khi tạo và chỉnh sửa tập tin. yaml xong, chạy lệnh sau để thêm chỉ thị vào tệp cấu hình của Apache và đồng thời khởi động lại PHP-FPM

/scripts/php_fpm_config – rebuild

Chương trình ưu đãi cuối năm tại Vietnix

Cách cấu hình PHP-FPM với NGINX

Request

  • Có khả năng mở một phiên SSH trên hệ thống Ubuntu 18. 05 bằng quyền root hoặc người dùng sudo
  • Cài đặt sẵn NGINX và PHP trên hệ thống

>> Xem thêm. Phiên là gì?

Cài đặt PHP-FPM

Nginx không thể tự chạy tập lệnh PHP mà cần một mô-đun như PHP-FPM để có thể quản lý tập lệnh PHP hiệu quả. Other face, PHP-FPM back active bên ngoài môi trường Nginx bằng cách tạo ra process riêng của nó. Vì vậy, khi người dùng yêu cầu một trang PHP, máy chủ nginx sẽ chuyển nó đến dịch vụ PHP-FPM thông qua FastCGI

Quá trình cài đặt PHP-FPM trong Ubuntu 18. 05 tùy chọn phiên bản PHP, bạn có thể kiểm tra tài liệu sử dụng trước khi bắt đầu bước này. Đoạn mã dưới đây cho phép cài đặt FPM trên phiên bản PHP 7. 3

# apt-get install php7.3-fpm

Dịch vụ FPM sẽ tự động khởi động sau khi quá trình hoàn tất. Người dùng có thể xác nhận việc cài đặt bằng lệnh systemd sau

# systemctl status php7.3-fpm
● php7.3-fpm.service - The PHP 7.3 FastCGI Process Manager
   Loaded: loaded [/lib/systemd/system/php7.3-fpm.service; enabled; vendor preset: enabled]
   Active: active [running] since Sun 2019-02-17 06:29:31 UTC; 30s ago
     Docs: man:php-fpm7.3[8]
 Main PID: 32210 [php-fpm7.3]
   Status: "Processes active: 0, idle: 2, Requests: 0, slow: 0, Traffic: 0req/sec"
    Tasks: 3 [limit: 1152]
   CGroup: /system.slice/php7.3-fpm.service
           ├─32210 php-fpm: master process [/etc/php/7.3/fpm/php-fpm.conf]
           ├─32235 php-fpm: pool www
           └─32236 php-fpm: pool www

Cấu hình PHP-FPM Pool

Dịch vụ php-fpm đã tạo một nhóm mặc định, cấu hình của nhóm này có thể được tìm thấy trong thư mục /etc/php/7. 3/fpm/nhóm. d. Người dùng có thể tùy chỉnh pool mặc định theo ý muốn, nhưng chúng ta nên tạo các pool riêng biệt để có thể kiểm tra giám sát việc phân bổ tài nguyên cho mỗi quy trình FPM tốt hơn

Ngoài ra, việc phân tách các pool cũng cho phép chạy chung độc lập với nhau, khi đó mỗi ứng dụng php có thể được cấu hình bằng cách cài đặt bộ nhớ cache của riêng nó thông qua PHP-FPM. Mọi thay đổi trong cấu hình của một nhóm sẽ không yêu cầu người dùng dừng truy cập hoặc khởi động bất kỳ nhóm nào khác

Bây giờ hãy tạo một pool FPM để chạy ứng dụng PHP thông qua một người dùng riêng biệt. Trước tiên, tạo người dùng mới có đặc quyền riêng với pool

# groupadd wordpress_user
# useradd -g wordpress_user wordpress_user

Tiếp theo, chuyển sang thư mục cấu hình của FPM để tạo một tệp cấu hình bằng trình soạn thảo văn bản bất kỳ

# cd /etc/php/7.3/fpm/pool.d
# vi wordpress_pool.conf
[wordpress_site]
user = wordpress_user
group = wordpress_user
listen = /var/run/php7.2-fpm-wordpress-site.sock
listen.owner = www-data
listen.group = www-data
php_admin_value[disable_functions] = exec,passthru,shell_exec,system
php_admin_flag[allow_url_fopen] = off
; Choose how the process manager will control the number of child processes. 
pm = dynamic 
pm.max_children = 75 
pm.start_servers = 10 
pm.min_spare_servers = 5 
pm.max_spare_servers = 20 
pm.process_idle_timeout = 10s

Thông tin chi tiết về các tùy chọn cấu hình và giá trị

  • [wordpress_site]. Tên của nhóm, không được trùng nhau
  • người dùng và nhóm. Người dùng và nhóm mà pool sẽ chạy
  • nghe. Tên socket file của pool
  • nghe. chủ sở hữu và lắng nghe. tập đoàn. Trùng với người dùng và nhóm mà nginx đang chạy
  • php_admin_value. Cho phép đặt các giá trị cấu hình PHP tùy chỉnh
  • php_admin_flag. Cho phép đặt cờ boolean
  • buổi chiều. Cài đặt trình quản lý các quy trình, giá trị Dynamic cho biết số lượng quy trình con được đặt động, dựa trên các chỉ thị dưới đây
  • buổi chiều. max_con. Con số lượng con [con] tối đa có thể tồn tại cùng lúc
  • buổi chiều. start_servers. Số lượng con được tạo khi khởi động
  • buổi chiều. min_spare_servers. Số lượng trẻ em tối thiểu ở trạng thái 'nhàn rỗi' [rảnh rỗi – đang chờ xử lý]. Nếu số lượng quá trình nhàn rỗi nhỏ hơn giá trị này, một số trẻ em sẽ được tạo thêm
  • buổi chiều. max_spare_servers. Số lượng con tối đa ở trạng thái 'nhàn rỗi'. Nếu số lượng quá trình nhàn rỗi lớn hơn thì một số trẻ em sẽ bị hủy
  • buổi chiều. process_idle_timeout. Số lượng tối đa của quá trình nhàn rỗi tối đa, chỉ sử dụng khi giá trị của pm được đặt thành Dynamic

Bên cạnh đó, ta cũng có thể truyền một số biến môi trường hệ thống vào dịch vụ php-fpm bằng các lệnh như

mkdir -p /var/cpanel/ApachePHPFPM/
3

Không giới hạn, ta có thể thêm tùy chọn sau vào tệp cấu hình để đặt tên máy chủ và vị trí thư mục tạm thời cho môi trường PHP

...
...
env[HOSTNAME] = $HOSTNAME
env[TMP] = /tmp
...
...

Ngoài ra, cài đặt cho trình quản lý quy trình trong tệp cấu hình của nhóm ở trên đã được đặt thành động. Một số tùy chọn khác bao gồm các tùy chọn khác

  • tĩnh. Số lượng process PHP duy trì sẽ được xác định
  • theo yêu cầu. Không tạo con khi khởi động. Các con sẽ được phân nhánh [fork] khi nhận được yêu cầu mới từ máy chủ

Sau khi hoàn tất việc tạo tệp cấu hình, hãy khởi động lại dịch vụ fpm để áp dụng các thay đổi mới

mkdir -p /var/cpanel/ApachePHPFPM/
0

FPM pool sẽ được tạo ngay lập tức để phục vụ các trang PHP. Lưu ý rằng ta cũng có thể tạo một dịch vụ systemd bằng cách chỉ định các tệp cấu hình FPM ở trên để khởi động/dừng các nhóm mà không ảnh hưởng đến nhau

Cấu hình NGINX cho PHP-FPM

Bây giờ chúng ta cần tạo một khối máy chủ NGINX để sử dụng nhóm vừa tạo ở trên. Cụ thể, chỉnh sửa cấu hình tệp đã chỉnh sửa NGINX rồi truyền đường dẫn đến ổ cắm tệp bằng tùy chọn

mkdir -p /var/cpanel/ApachePHPFPM/
4

mkdir -p /var/cpanel/ApachePHPFPM/
0

Đảm bảo cú pháp các cấu hình chính xác đồng nhất, sau đó khởi động lại NGINX bằng lệnh sau.

mkdir -p /var/cpanel/ApachePHPFPM/
1

Kiểm tra cấu hình PHP-FPM NGINX

Để kiểm tra xem file config NGINX đang sử dụng pool FPM ở trên hay không, ta cần tạo một file PHP info trong web root bằng lệnh sau

mkdir -p /var/cpanel/ApachePHPFPM/
2

Trong đó thay đường dẫn /var/www/html/wordpress thành giá trị tương ứng của môi trường

Tiếp theo, con trỏ duyệt web đến trang PHP info vừa tạo. Lưu ý rằng các biến $_SERVER[‘USER’] và $_SERVER[‘HOME’] đều đang trỏ đến wordpress_user và /home/wordpress_user đã được thiết lập trong file config FPM ở bước trước. Vì vậy có thể yên tâm rằng NGINX đang phục vụ các trang PHP sử dụng FPM pool do ta tạo ra

PHP-FPM có tốt hơn không?

PHP-FPM nhanh hơn các phương pháp dựa trên CGI truyền thống, chẳng hạn như SUPHP, cho môi trường PHP nhiều người dùng. Nó không làm quá tải bộ nhớ của hệ thống với PHP từ quy trình Apache. Các tính năng của PHP-FPM bao gồm. Sinh sản quy định ứng dụng

FPM là viết tắt của từ gì trong PHP-FPM?

FPM [FastCGI Process Manager] là một phát triển khai thác FastCGI PHP chính có chứa một số tính năng [chủ yếu] hữu ích cho các trang web tải nặng

WordPress có cần PHP-FPM không?

Để chạy WordPress, bạn cần có máy chủ web, máy chủ cơ sở dữ liệu và ngôn ngữ kịch bản PHP. Để WordPress hoạt động ở mức hiệu suất tối đa, bạn phải định cấu hình nhiều máy chủ khác nhau này theo cài đặt được đặt ra của WordPress

Làm cách nào để bắt đầu PHP-FPM?

Trên Windows.
Mở dịch vụ trong Bảng điều khiển quản lý. Bắt đầu > Chạy > “dịch vụ. msc” > OK.
Chọn php-fpm từ danh sách.
Nhấn chuột phải và chọn Bắt đầu.

PHP-FPM có an toàn không?

Vì mỗi yêu cầu được xử lý bởi một quy trình riêng [được sử dụng lại] trong PHP-FPM, nên an toàn khi sử dụng mô-đun với PHP-FPM

Lời kết

Hy vọng bài viết trên đã giải đáp được về PHP-FPM là gì và cách cấu hình PHP-FPM dành cho bạn. Nếu có thắc mắc hoặc đóng góp ý kiến, mời bạn để bình luận lại dưới bài viết này. Vietnix xin chân thành cảm ơn bạn đã quan tâm

Chia sẻ bài viết

đánh giá

5/5 - [1 bình chọn]

nguyễn hưng

Conconnection with mình qua

Mình là Bo - admin của Quản Trị Linux. Mình đã có 10 năm làm việc trong mảng System, Network, Security và đã trải nghiệm qua các chứng chỉ như CCNP, CISSP, CISA, đặc biệt là chống tấn công DDoS. Gần đây mình trải nghiệm thêm Digital Marketing và đã hoàn thành chứng chỉ CDMP của PearsonVUE. Mình rất thích được chia sẻ và hỗ trợ cho mọi người, nhất là các bạn sinh viên. Please connect with mình nhé

Chủ Đề