Thứ tư, 13/05/2020 | 00:00 GMT+7

Cách cấu hình Apache HTTP với MPM Event và PHP-FPM trên Ubuntu 18.04

Web server Apache HTTP đã phát triển qua nhiều năm để hoạt động trong các môi trường khác nhau và giải quyết các nhu cầu khác nhau. Một vấn đề quan trọng mà Apache HTTP phải giải quyết, giống như bất kỳ web server nào, là cách xử lý các quy trình khác nhau để phục vụ một yêu cầu giao thức http. Điều này liên quan đến việc mở một socket , xử lý yêu cầu, giữ kết nối mở trong một khoảng thời gian nhất định, xử lý các sự kiện mới xảy ra thông qua kết nối đó và trả lại nội dung được tạo bởi một chương trình được tạo bằng một ngôn ngữ cụ thể (chẳng hạn như PHP, Perl hoặc Python) . Các việc này được thực hiện và kiểm soát bởi Mô-đun đa xử lý (MPM).

Apache HTTP đi kèm với ba MPM khác nhau:

  • Pre-fork : Một quy trình mới được tạo cho mỗi kết nối đến server . Mỗi tiến trình được tách biệt với các tiến trình khác, vì vậy không có bộ nhớ nào được chia sẻ giữa chúng, ngay cả khi chúng đang thực hiện các lệnh gọi giống hệt nhau tại một số thời điểm trong quá trình thực thi. Đây là một cách an toàn để chạy các ứng dụng được liên kết với các thư viện không hỗ trợ phân stream — thường là các ứng dụng hoặc thư viện cũ hơn.
  • Worker : Quy trình cha chịu trách nhiệm chạy một group các quy trình con, một số quy trình con đang lắng nghe các kết nối mới đến và những quy trình khác đang cung cấp nội dung được yêu cầu. Mỗi quá trình là một stream (một stream có thể xử lý một kết nối) vì vậy một quá trình có thể xử lý một số yêu cầu đồng thời. Phương pháp xử lý kết nối này khuyến khích sử dụng tài nguyên tốt hơn, trong khi vẫn duy trì sự ổn định. Đây là kết quả của group các quy trình có sẵn, thường có các stream miễn phí sẵn sàng để phục vụ ngay lập tức các kết nối mới.
  • Event : Dựa trên worker, MPM này tiến thêm một bước nữa bằng cách tối ưu hóa cách quy trình mẹ lên lịch các việc cho các quy trình con và các stream liên kết với các quy trình đó. Một kết nối vẫn mở trong 5 giây theo mặc định và đóng nếu không có sự kiện mới nào xảy ra; đây là giá trị mặc định của chỉ thị duy trì tồn tại, giữ lại stream liên kết với nó. Event MPM cho phép quá trình quản lý các stream để một số stream có thể tự do xử lý các kết nối mới đến trong khi những stream khác được giữ liên kết với các kết nối trực tiếp. Cho phép phân phối lại các nhiệm vụ được giao cho các stream sẽ giúp sử dụng và hiệu suất tài nguyên tốt hơn.

Mô-đun Sự kiện MPM là một module đa xử lý nhanh có sẵn trên web server Apache HTTP.

PHP-FPM là Trình quản lý tiến trình FastCGI cho PHP. Giao thức FastCGI dựa trên Giao diện cổng chung (CGI), một giao thức nằm giữa các ứng dụng và web server như Apache HTTP. Điều này cho phép các nhà phát triển viết ứng dụng tách biệt với hành vi của web server . Các chương trình chạy các quy trình của chúng một cách độc lập và chuyển sản phẩm của chúng đến web server thông qua giao thức này. Mỗi kết nối mới cần được xử lý bởi một ứng dụng sẽ tạo ra một quy trình mới.

Bằng cách kết hợp Sự kiện MPM trong Apache HTTP với Trình quản lý tiến trình PHP FastCGI (PHP-FPM), một trang web có thể tải nhanh hơn và xử lý nhiều kết nối đồng thời hơn trong khi sử dụng ít tài nguyên hơn.

Trong hướng dẫn này, bạn sẽ cải thiện hiệu suất của LAMP bằng cách thay đổi module đa xử lý mặc định từ pre-fork thành sự kiện và bằng cách sử dụng trình quản lý tiến trình PHP-FPM để xử lý mã PHP thay vì mod_php cổ điển trong Apache HTTP.

Yêu cầu

Trước khi bắt đầu hướng dẫn này, bạn cần những thứ sau:

Bước 1 - Thay đổi module đa xử lý

Ubuntu kế thừa các tập lệnh để bật hoặc tắt các module Apache HTTP từ bản phân phối chính của nó, Debian. Bạn sẽ sử dụng bộ công cụ này trong bước này để tắt module Pre-fork và bật module Sự kiện.

Trong bước này, bạn sẽ dừng Apache HTTP, vô hiệu hóa module PHP 7.2 được liên kết với module Pre-fork, sau đó tắt Pre-fork để bật ngay module Sự kiện.

Trước tiên, bạn sẽ dừng dịch vụ Apache HTTP:

  • sudo systemctl stop apache2

Đến đây bạn có thể vô hiệu hóa module PHP 7.2 , có liên quan đến module Pre-fork:

  • sudo a2dismod php7.2

Sau đó, vô hiệu hóa module MPM Pre-fork:

  • sudo a2dismod mpm_prefork

Bây giờ hãy bật module MPM Sự kiện:

  • sudo a2enmod mpm_event

Bạn đã chuyển MPM từ pre-fork sang sự kiện và xóa kết nối module PHP 7.2 giữa PHP và Apache HTTP. Trong bước tiếp theo, bạn sẽ cài đặt module php-fpm , cũng như các thư viện và module proxy liên quan. Bạn sẽ cấu hình Apache HTTP để nó cũng có thể giao tiếp với PHP.

Bước 2 - Cấu hình Apache HTTP để sử dụng Trình quản lý tiến trình FastCGI

Ở giai đoạn này, bạn đã chuyển cách Apache HTTP xử lý kết nối bằng cách chuyển từ MPM Pre-fork sang Sự kiện. Tuy nhiên, bạn đã vô hiệu hóa module PHP đã kết nối Apache HTTP với bất kỳ chương trình nào chạy trên PHP.

Trong bước này, bạn sẽ cài đặt PHP processor -FPM để Apache HTTP lại có thể xử lý các chương trình PHP. Và bạn cũng sẽ cài đặt các thư viện phụ thuộc và kích hoạt các module để cả hai có thể hợp tác trơn tru và nhanh chóng hơn trước.

Đầu tiên hãy cài đặt php-fpm . Lệnh sau sẽ cài đặt gói PHP-FPM và nó sẽ tự động kích hoạt dịch vụ php7.2-fpm tích hợp với systemd , do đó dịch vụ được khởi động tại thời điểm khởi động:

  • sudo apt install php-fpm

Để giao tiếp, Apache HTTP và PHP cần một thư viện cho phép dung lượng đó. Đến đây bạn sẽ cài đặt libapache2-mod-fcgid , có thể hoạt động như một giao diện giữa các chương trình với web server và nó dành riêng cho Apache HTTP. Giao tiếp này sẽ xảy ra thông qua socket UNIX.

Cài đặt thư viện này:

  • sudo apt install libapache2-mod-fcgid

Bạn đã cài đặt php-fpmlibapache2-mod-fcgid , nhưng cả hai đều chưa được bật.

Trước tiên hãy bật module php-fpm bằng lệnh sau:

  • sudo a2enconf php7.2-fpm

Thứ hai kích hoạt module proxy Apache HTTP:

  • sudo a2enmod proxy

Thứ ba, kích hoạt module proxy FastCGI trong Apache HTTP:

  • sudo a2enmod proxy_fcgi

Lưu ý: Bạn có thể đọc cấu hình của tương tác này giữa các chương trình PHP và Apache HTTP thông qua một socket UNIX như sau:

  • cat /etc/apache2/conf-enabled/php7.2-fpm.conf

 

Mọi thứ hiện đã sẵn sàng để bạn có thể khởi động Apache HTTP. Trước tiên, bạn sẽ thực hiện kiểm tra cấu hình:

  • sudo apachectl configtest
Output
Syntax OK 

Sau đó, bạn có thể tiến hành khởi động lại Apache HTTP, vì nó đã được tự động khởi động khi cài đặt thư viện FastCGI libapache2-mod-fcgid :

  • sudo systemctl restart apache2

Bạn đã cài đặt module php-fpm , cấu hình Apache HTTP để hoạt động với nó, kích hoạt các module cần thiết để giao thức FastCGI hoạt động và khởi động các dịch vụ tương ứng.

Bây giờ Apache đã kích hoạt module Event MPM và PHP-FPM hiện diện và đang chạy, đã đến lúc kiểm tra mọi thứ có hoạt động như dự kiến hay không.

Bước 3 - Kiểm tra cấu hình của bạn

Để kiểm tra xem các thay đổi cấu hình đã được áp dụng hay chưa, bạn sẽ chạy một số thử nghiệm. Phần đầu tiên sẽ kiểm tra xem Apache HTTP đang sử dụng module đa xử lý nào. Điều thứ hai sẽ xác minh PHP đang sử dụng trình quản lý FPM.

Kiểm tra server Apache HTTP bằng cách chạy lệnh sau:

  • sudo apachectl -M | grep 'mpm'

Đầu ra của bạn sẽ như sau:

Output
mpm_event_module (shared) 

Bạn có thể lặp lại tương tự cho module proxy và FastCGI:

  • sudo apachectl -M | grep 'proxy'

Đầu ra sẽ hiển thị:

Output
proxy_module (shared) proxy_fcgi_module (shared) 

Nếu bạn muốn xem toàn bộ danh sách các module , bạn có thể xóa phần thứ hai của lệnh sau -M .

Bây giờ là lúc để kiểm tra xem PHP có đang sử dụng Trình quản lý tiến trình FastCGI hay không. Để làm như vậy, bạn sẽ viết một đoạn mã PHP nhỏ sẽ hiển thị cho bạn tất cả thông tin liên quan đến PHP.

Chạy lệnh sau để ghi một file có tên như sau:

  • sudo nano /var/www/your_domain/info.php

Thêm nội dung sau vào file info.php :

info.php
<?php phpinfo(); ?> 

Bây giờ hãy truy cập URL của server của bạn và thêm info.php vào cuối như sau: http:// your_domain /info.php .

Mục nhập API server sẽ là FPM / FastCGI .

Màn hình PHP mục nhập API  server  FPM / FastCGI

Xóa file info.php sau khi kiểm tra này để không có thông tin nào về server được tiết lộ công khai:

  • sudo rm /var/www/yourdomain.com/info.php

Bạn đã kiểm tra trạng thái hoạt động của module MPM, các module xử lý FastCGI và việc xử lý mã PHP.

Kết luận

Bạn đã tối ưu hóa LAMP ban đầu của bạn , vì vậy số lượng kết nối để tạo các tiến trình Apache HTTP mới đã tăng lên, PHP-FPM sẽ xử lý mã PHP hiệu quả hơn và việc sử dụng tài nguyên tổng thể đã được cải thiện.

Xem tài liệu dự án server Apache HTTP để biết thêm thông tin về các module khác nhau và các dự án liên quan.


Tags:

Các tin liên quan

Cách cài đặt web server Apache trên CentOS 8 [Quickstart]
2020-05-08
Cách bảo mật Apache bằng Let's Encrypt trên Ubuntu 20.04
2020-04-29
Cách cài đặt web server Apache trên Ubuntu 20.04 [Quickstart]
2020-04-28
Cách cài đặt web server Apache trên Ubuntu 20.04
2020-04-27
Cách cài đặt web server Apache trên CentOS 8
2020-04-24
Cách thiết lập server ảo Apache trên Ubuntu 18.04 [Quickstart]
2020-02-19
Các bước được đề xuất để ngăn chặn HTTP Apache trên FreeBSD 12.0
2020-02-12
Cách thiết lập server ảo Apache trên Ubuntu 18.04
2020-02-10
Cách thiết lập xác thực mật khẩu với Apache trên Ubuntu 18.04 [Quickstart]
2020-02-04
Cách thiết lập xác thực mật khẩu với Apache trên Ubuntu 18.04
2020-02-03