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:
- Một server Ubuntu 18.04 được cài đặt theo hướng dẫn cài đặt server ban đầu Ubuntu 18.04 , bao gồm user không phải root có quyền sudo và firewall .
- LAMP được cài đặt trên server của bạn sau Cách cài đặt Linux, Apache, MySQL, PHP ( LAMP ) trên Ubuntu 18.04 .
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-fpm
và libapache2-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
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:
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ị:
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
:
<?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 .
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.
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