Computer >> Máy Tính >  >> Hệ thống >> Linux

Cách định cấu hình Apache và PHP cho các trang web có lưu lượng truy cập cao trên máy chủ Linux

Cách định cấu hình Apache và PHP cho các trang web có lưu lượng truy cập cao trên máy chủ Linux

Hầu hết mọi hướng dẫn về cách cài đặt ngăn xếp LAMP (Linux, Apache, MySQL, PHP) sẽ khuyến nghị bạn sử dụng mô-đun Apache tích hợp sẵn để xử lý các tập lệnh PHP. Ví dụ:trong Ubuntu, bạn sẽ kích hoạt tính năng này khi sử dụng lệnh như sudo apt install libapache2-mod-php để cài đặt một gói. Điều này sẽ buộc Apache sử dụng mpm_prefork. Mỗi khi khách truy cập vào trang web của bạn, một quy trình mới sẽ được khởi chạy để xử lý kết nối đó. Điều này hoạt động tốt khi lưu lượng truy cập thấp.

Tuy nhiên, nó sẽ trở thành một vấn đề lớn nếu bạn nhận được một lượng truy cập đột ngột. Ví dụ:một bài đăng trên Reddit có thể bao gồm trang web của bạn và nếu bài đăng đó trở nên phổ biến, bạn có thể nhận được hàng nghìn khách truy cập chỉ trong vài phút.

Trong trường hợp tốt nhất, nếu Apache có thể xử lý sự cố bùng nổ lưu lượng truy cập, một số khách truy cập không may mắn có thể phải đợi từ 30 đến 60 giây cho đến khi trang được tải, điều này thật vô lý trong thế giới ngày nay. Trong trường hợp xấu nhất, máy chủ sẽ bắt đầu bị lag nặng và một số kết nối sẽ bị ngắt đơn giản vì thiếu tài nguyên. Trong trường hợp này, khách truy cập sẽ thấy lỗi trong trình duyệt của họ.

Đó cũng không phải là một kịch bản tốt, vì bạn có thể mất sự chú ý của hàng trăm hoặc hàng nghìn độc giả, khách hàng hoặc người hâm mộ quan tâm.

Thật không may, PHP là một nguồn tài nguyên khá lớn. Tuy nhiên, với mpm_event, Apache có thể xử lý lượng truy cập đột ngột theo cách hiệu quả hơn nhiều. Tuy nhiên, chúng tôi khuyến nghị rằng máy chủ của bạn có ít nhất 2GB RAM và 2 lõi CPU, thực hoặc ảo, và thậm chí nhiều hơn nữa nếu bạn mong đợi có lưu lượng truy cập tăng đột biến, chẳng hạn như hơn mười khách truy cập mỗi giây. Nếu bạn đang sử dụng máy chủ riêng ảo, hãy thêm nhiều lõi CPU ảo hơn vào tình huống của bạn và bộ nhớ SSD. RAM là thứ yếu.

Cách sử dụng sự kiện Apache MPM và PHP-FPM trên các bản phân phối dựa trên Debian

Trên Debian, Ubuntu hoặc các bản phân phối khác từ họ này, chỉ cần tránh cài đặt gói “libapache2-mod-php”. Khi bạn cài đặt Apache, nó sử dụng sự kiện MPM theo mặc định. Nhưng khi cài đặt gói được đề cập, một tập lệnh sẽ vô hiệu hóa sự kiện MPM và bật chế độ làm việc trước MPM. Mô-đun Apache PHP chỉ có thể hoạt động (an toàn) với mpm_prefork. Tất nhiên, nếu không có “libapache2-mod-php”, bạn không có bộ xử lý cho các tệp PHP. Vì vậy, bạn sẽ sử dụng PHP-FPM thay vì mô-đun PHP có trong Apache. Đây là cách bạn cài đặt ngăn xếp LAMP trên một máy chủ mới. Bạn có thể điều chỉnh các bước theo yêu cầu của ứng dụng web của mình.

Đầu tiên, đăng nhập với quyền root. Sau đó, cài đặt Apache.

apt update && apt install apache2

Tại thời điểm này, bạn có thể thấy rằng Apache thực sự xuất xưởng với sự kiện MPM được bật theo mặc định.

apachectl -V

Cách định cấu hình Apache và PHP cho các trang web có lưu lượng truy cập cao trên máy chủ Linux

Cài đặt PHP-FPM.

apt install php-fpm

Bạn sẽ thấy hướng dẫn về cách bật bộ xử lý PHP trong Apache.

Cách định cấu hình Apache và PHP cho các trang web có lưu lượng truy cập cao trên máy chủ Linux

Bật giao thức FastCGI.

a2enmod proxy_fcgi

Bật cấu hình mặc định PHP-FPM cho Apache.

a2enconf php7.0-fpm

Lưu ý :trong các phiên bản Debian / Ubuntu trong tương lai, lệnh này có thể thay đổi thành lệnh khác, ví dụ:a2enconf php7.6-fpm , bởi vì PHP-FPM sẽ là một phiên bản khác.

Khởi động lại Apache.

systemctl restart apache2

Cài đặt phần còn lại của các yêu cầu cho ứng dụng PHP của bạn. Đây là một ví dụ:

apt install mariadb-server php-mysql

Điều này sẽ cài đặt một máy chủ cơ sở dữ liệu và mô-đun PHP MySQL để ứng dụng PHP của bạn có thể kết nối với cơ sở dữ liệu.

Cách sử dụng sự kiện Apache MPM và PHP-FPM trên các bản phân phối dựa trên RedHat

Sự lựa chọn phân phối máy chủ phổ biến khác là RedHat hoặc CentOS. Theo cách tương tự như trên, một ví dụ về cài đặt Apache sạch với sự kiện MPM được kích hoạt và PHP-FPM sẽ được cung cấp.

Đăng nhập bằng quyền root và cài đặt Apache.

yum install httpd

Không giống như các bản phân phối dựa trên Debian, ở đây bạn sẽ thấy rằng Apache sử dụng chức năng làm việc trước MPM theo mặc định, ít nhất là trên CentOS 7 mới nhất có sẵn tại thời điểm viết bài.

apachectl -V

Cách định cấu hình Apache và PHP cho các trang web có lưu lượng truy cập cao trên máy chủ Linux

Để kích hoạt sự kiện MPM, bạn phải chỉnh sửa tệp cấu hình.

sed -i '/mpm_prefork\.so$/s/^/#/' /etc/httpd/conf.modules.d/00-mpm.conf

Thao tác này sẽ thêm một # đăng nhập để nhận xét (hủy kích hoạt) dòng LoadModule mpm_prefork_module modules/mod_mpm_prefork.so .

Cách định cấu hình Apache và PHP cho các trang web có lưu lượng truy cập cao trên máy chủ Linux

Bây giờ bỏ ghi chú (kích hoạt) dòng #LoadModule mpm_event_module modules/mod_mpm_event.so bằng cách xóa # trước ký bằng lệnh tiếp theo.

sed -i '/mpm_event\.so$/s/^#//' /etc/httpd/conf.modules.d/00-mpm.conf

Khởi động Apache và cho phép nó tự khởi động khi khởi động.

systemctl start httpd.service
systemctl enable httpd.service

Kiểm tra xem Apache hiện có sử dụng sự kiện MPM hay không.

apachectl -V

Cách định cấu hình Apache và PHP cho các trang web có lưu lượng truy cập cao trên máy chủ Linux

Cài đặt mô-đun PHP-FPM và FastCGI.

yum install php-fpm mod_fcgid

Tạo “/etc/httpd/conf.d/php.conf” để hướng dẫn Apache về cách xử lý các tệp PHP. Sao chép TẤT CẢ nội dung bên dưới và dán tất cả nội dung đó cùng một lúc vào thiết bị đầu cuối, sau đó nhấn ENTER.

cat <<PASTE > /etc/httpd/conf.d/php.conf
# Redirect to local php-fpm if mod_php is not available
<IfModule !mod_php7.c>
<IfModule proxy_fcgi_module>
# Enable http authorization headers
<IfModule setenvif_module>
SetEnvIfNoCase ^Authorization$ "(.+)" HTTP_AUTHORIZATION=$1
</IfModule>
 
<FilesMatch ".+\.ph(p[3457]?|t|tml)$">
#SetHandler "proxy:unix:/run/php/php7.0-fpm.sock|fcgi://localhost"
SetHandler "proxy:fcgi://127.0.0.1:9000"
</FilesMatch>
<FilesMatch ".+\.phps$">
# Deny access to raw php sources by default
# To re-enable it's recommended to enable access to the files
# only in specific virtual host or directory
Require all denied
</FilesMatch>
# Deny access to files without filename (e.g. '.php')
<FilesMatch "^\.ph(p[3457]?|t|tml|ps)$">
Require all denied
</FilesMatch>
</IfModule>
</IfModule>
PASTE

Tín dụng cho cấu hình tuyệt vời này sẽ được chuyển đến Debian. Các nguồn khác đề xuất một tệp cấu hình đơn giản như:

<FilesMatch \.php$>
SetHandler "proxy:fcgi://127.0.0.1:9000"
</FilesMatch>

Nhưng điều này dễ bị một số cuộc tấn công và nếu một số dịch vụ nhất định bị lỗi, bạn có thể để lộ tệp PHP ra công chúng, do đó có khả năng làm lộ mật khẩu, mã và dữ liệu nhạy cảm được lưu trữ.

Khởi động lại Apache.

systemctl restart httpd.service

Khởi động PHP-FPM và kích hoạt tính năng tự khởi động của nó khi khởi động.

systemctl start php-fpm.service
systemctl enable php-fpm.service

Kết luận

Bây giờ bạn có một máy chủ Apache có quy mô tốt hơn nhiều với lưu lượng truy cập. Tuy nhiên, hãy nhớ rằng bạn đang sử dụng cài đặt mặc định, như cài đặt “tốt nhất” đối với hầu hết mọi người. Nếu bạn thực sự muốn tận dụng tối đa máy chủ HTTP của mình, bạn phải đọc về các biến khác nhau mà bạn có thể điều chỉnh. Các giá trị phù hợp cho các giá trị này phụ thuộc nhiều vào tài nguyên máy chủ, lưu lượng truy cập dự kiến ​​và ứng dụng PHP.