Thứ sáu, 12/07/2019 | 00:00 GMT+7

Cách cấu hình Apache HTTP với Sự kiện MPM và PHP-FPM trên FreeBSD 12.0

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.
  • Sự kiện : 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 ngăn xếp FAMP 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:

  • Server FreeBSD 12.0 được cài đặt theo hướng dẫn này.
  • Ngăn xếp FAMP được cài đặt trên server của bạn theo hướng dẫn này.
  • Quyền truy cập vào user có quyền root (hoặc được phép sử dụng sudo) để thực hiện thay đổi cấu hình.

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

Bạn sẽ bắt đầu bằng cách tìm kiếm lệnh pre-fork trong file httpd.conf . Đây là file cấu hình chính cho Apache HTTP trong đó bạn có thể bật và tắt các module . Bạn có thể chỉnh sửa và đặt các chỉ thị như cổng lắng nghe nơi Apache HTTP sẽ phân phát nội dung hoặc vị trí của nội dung sẽ hiển thị trong file này.

Để thực hiện những thay đổi này, bạn sẽ sử dụng nl , dòng số, chương trình, với cờ -ba để đếm và đánh số các dòng sao cho không có gì không khớp ở giai đoạn sau. Kết hợp với grep , lệnh này trước tiên sẽ đếm tất cả các dòng trong file được chỉ định trong đường dẫn và sau khi kết thúc, nó sẽ tìm kiếm chuỗi ký tự bạn đang tìm kiếm.

Chạy lệnh sau để chương trình nl sẽ xử lý và đánh số các dòng trong httpd.conf . Sau đó, grep sẽ xử lý kết quả bằng cách tìm kiếm chuỗi ký tự đã cho 'mod_mpm_prefork' :

  • nl -ba /usr/local/etc/apache24/httpd.conf | grep 'mod_mpm_prefork'

Khi kết quả , bạn sẽ thấy một cái gì đó tương tự như:

Output
67 LoadModule mpm_prefork_module libexec/apache24/mod_mpm_prefork.so

Hãy chỉnh sửa dòng 67 bằng editor của bạn. Trong hướng dẫn này, bạn sẽ sử dụng vi , là editor mặc định trên FreeBSD:

  • sudo vi +67 /usr/local/etc/apache24/httpd.conf

Nối ký hiệu # ở đầu dòng để dòng này được chú thích như sau:

/usr/local/etc/apache24/httpd.conf
... # LoadModule mpm_prefork_module libexec/apache24/mod_mpm_prefork.so ... 

Bằng cách thêm ký hiệu # bạn đã vô hiệu hóa module MPM trước fork.

Đến đây bạn sẽ tìm thấy chỉ thị sự kiện trong cùng một file httpd.conf .

  • nl -ba /usr/local/etc/apache24/httpd.conf | grep mpm_event

Bạn sẽ thấy kết quả tương tự như sau:

Output
... 66 #LoadModule mpm_event_module libexec/apache24/mod_mpm_event.so ...

Bây giờ, bạn sẽ xóa ký hiệu # ở dòng 66 để bật MPM Sự kiện:

  • sudo vi +66 /usr/local/etc/apache24/httpd.conf

Bây giờ chỉ thị sẽ đọc như sau:

/usr/local/etc/apache24/httpd.conf
... LoadModule mpm_event_module libexec/apache24/mod_mpm_event.so ... 

Đến đây bạn đã chuyển cấu hình từ MPM pre-fork sang sự kiện, bạn có thể xóa gói mod_php73 kết nối PHP processor với Apache HTTP, vì nó không còn cần thiết và sẽ gây ảnh hưởng nếu nó vẫn còn trên hệ thống:

  • sudo pkg remove -y mod_php73

Đảm bảo cấu hình đúng bằng cách chạy lệnh sau để kiểm tra:

  • sudo apachectl configtest

Nếu bạn thấy Syntax OK trong kết quả của bạn , bạn có thể khởi động lại server Apache HTTP:

  • sudo apachectl restart

Lưu ý: Nếu có các kết nối HTTP đang chạy khác trên server của bạn, bạn nên khởi động lại tùy chỉnh thay vì khởi động lại thông thường. Điều này sẽ đảm bảo user không bị đẩy ra ngoài, mất kết nối của họ:

  • sudo apachectl graceful

Bạn đã chuyển MPM từ pre-fork sang sự kiện và xóa kết nối module mod_php73 PHP sang Apache HTTP. Trong bước tiếp theo, bạn sẽ cài đặt module PHP-FPM và cấu hình Apache HTTP để nó có thể giao tiếp với PHP nhanh hơn.

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

FreeBSD có một số version PHP được hỗ trợ mà bạn có thể cài đặt thông qua trình quản lý gói. Trên FreeBSD, các file binary khác nhau của các version có sẵn khác nhau được biên dịch thay vì chỉ sử dụng một file như hầu hết các bản phân phối GNU / Linux cung cấp trong repository lưu trữ mặc định của chúng. Để làm theo phương pháp hay nhất, bạn sẽ sử dụng version được hỗ trợ, bạn có thể kiểm tra phiên bản này tại trang các version được hỗ trợ của PHP .

Trong bước này, bạn sẽ thêm PHP-FPM làm dịch vụ đang chạy để bắt đầu khi server khởi động . Bạn cũng sẽ cấu hình Apache HTTP để hoạt động với PHP bằng cách thêm cấu hình dành riêng cho module cũng như kích hoạt một số module khác trong httpd.conf .

Đầu tiên, bạn sẽ thêm 'php_fpm_enable=YES' vào file /etc/rc.conf để dịch vụ PHP-FPM có thể bắt đầu. Bạn sẽ làm điều đó bằng cách sử dụng lệnh sysrc :

  • sudo sysrc php_fpm_enable="YES"

Đến đây bạn sẽ thêm module php-fpm vào folder của module Apache, vì vậy nó được cấu hình để sử dụng bởi Apache HTTP. Tạo file sau để thực hiện :

  • sudo vi /usr/local/etc/apache24/modules.d/030_php-fpm.conf

Thêm phần sau vào 030_php-fpm.conf :

/usr/local/etc/apache24/modules.d/030_php-fpm.conf
<IfModule proxy_fcgi_module>     <IfModule dir_module>         DirectoryIndex index.php     </IfModule>     <FilesMatch "\.(php|phtml|inc)$">         SetHandler "proxy:fcgi://127.0.0.1:9000"     </FilesMatch> </IfModule> 

Điều này nói rằng nếu module 'proxy_fcgi' được bật cũng như 'dir_module' thì mọi file đã xử lý trùng với phần mở rộng trong ngoặc đơn sẽ được xử lý bởi trình quản lý tiến trình FastCGI đang chạy trên máy local thông qua cổng 9000 — như nếu máy local một server proxy. Đây là nơi kết nối giữa module PHP-FPM và Apache HTTP. Để làm điều này, bạn sẽ kích hoạt các module khác trong bước này.

Để bật module proxy, trước tiên bạn sẽ tìm kiếm nó trong file httpd.conf :

  • nl -ba /usr/local/etc/apache24/httpd.conf | grep mod_proxy.so

Bạn sẽ thấy kết quả tương tự như sau:

Output
... 129 #LoadModule proxy_module libexec/apache24/mod_proxy.so ...

Bạn sẽ bỏ comment bằng cách xóa ký hiệu # :

  • sudo vi +129 /usr/local/etc/apache24/httpd.conf

Dòng sẽ trông như sau sau khi được chỉnh sửa:

/usr/local/etc/apache24/httpd.conf
... LoadModule proxy_module libexec/apache24/mod_proxy.so ... 

Đến đây bạn có thể kích hoạt module FastCGI. Tìm module bằng lệnh sau:

  • nl -ba /usr/local/etc/apache24/httpd.conf | grep mod_proxy_fcgi.so

Bạn sẽ thấy một cái gì đó tương tự như sau:

Output
... 133 #LoadModule proxy_fcgi_module libexec/apache24/mod_proxy_fcgi.so ...

Bây giờ bỏ comment 133 như bạn đã làm với các module khác:

  • sudo vi +133 /usr/local/etc/apache24/httpd.conf

Bạn sẽ để lại dòng như sau:

/usr/local/etc/apache24/httpd.conf
... LoadModule proxy_fcgi_module libexec/apache24/mod_proxy_fcgi.so ... 

Sau khi hoàn tất, bạn sẽ bắt đầu dịch vụ PHP-FPM:

  • sudo service php-fpm start

Và bạn sẽ khởi động lại Apache để nó tải các thay đổi cấu hình mới nhất kết hợp với module PHP:

  • sudo apachectl restart

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 rất 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 vi /usr/local/www/apache24/data/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 server của bạn và thêm info.php vào cuối như sau: http:// your_server_IP_address /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

Hãy nhớ xóa file info.php sau khi kiểm tra này để không có thông tin về server bị tiết lộ công khai.

  • sudo rm /usr/local/www/apache24/data/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 ngăn xếp FAMP 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 một Apache, MySQL và PHP (FAMP) trên FreeBSD 12.0
2019-06-28
Cách cài đặt web server Apache trên CentOS 7
2019-05-29
Cách bảo mật Apache bằng Let's Encrypt trên CentOS 7
2019-05-23
Cách cài đặt Apache Kafka trên Ubuntu 18.04
2019-05-10
Cách cài đặt Apache Kafka trên Debian 9
2019-05-10
Cách backup, nhập và di chuyển dữ liệu Apache Kafka của bạn trên Debian 9
2019-03-28
Cách cài đặt Apache Kafka trên CentOS 7
2019-03-27
Cách backup, nhập và di chuyển dữ liệu Apache Kafka của bạn trên CentOS 7
2019-03-25
Cách cài đặt và cấu hình Apache ZooKeeper Cluster trên Ubuntu 18.04
2019-01-03
Cách backup, nhập và di chuyển dữ liệu Apache Kafka của bạn trên Ubuntu 18.04
2018-12-20