Hướng dẫn tối ưu cấu hình Apache cho website có lưu lượng truy cập cao

Nếu bạn đang chạy một trang web nhận được nhiều lưu lượng truy cập, điều cần thiết là phải tối ưu hóa cấu hình máy chủ web Apache của bạn để đảm bảo hiệu suất và tính khả dụng tối đa. Trong bài viết này, Long Vân sẽ cung cấp cho bạn một số mẹo và ví dụ về cách tối ưu hóa cấu hình Apache của bạn cho các trang web có lưu lượng truy cập cao.

I. Sử dụng module MPM phù hợp

Apache sử dụng Multi-Processing Modules (MPM) để xử lý các yêu cầu của client. MPM chịu trách nhiệm tạo các tiến trình hoặc luồng con để xử lý các yêu cầu đến. Có ba module MPM có sẵn trong Apache: preforkworkervà event.

  • MPM preforklà module MPM lâu đời nhất và ổn định nhất. Nó tạo ra một tiến trình cho mỗi kết nối, điều này có thể dẫn đến việc sử dụng nhiều tài nguyên.
  • MPM workertạo nhiều luồng cho mỗi tiến trình, có thể cải thiện hiệu suất và giảm mức sử dụng tài nguyên.
  • MPM eventtương tự như workerMPM, nhưng nó bổ sung cơ chế thông báo sự kiện không đồng bộ để cải thiện hiệu suất hơn nữa.

Để tối ưu hóa cấu hình Apache của bạn để có lưu lượng truy cập cao, chúng tôi khuyên bạn nên sử dụng module worker hoặc event MPM. Bạn có thể kích hoạt các mô-đun này bằng cách bỏ # các dòng sau trong tệp cấu hình Apache của mình:

LoadModule mpm_worker_module modules/mod_mpm_worker.so

hoặc

LoadModule mpm_event_module modules/mod_mpm_event.so

II. Tăng số lượng tiến trình/luồng con

Để xử lý khối lượng lớn yêu cầu gửi đến, bạn cần tăng số lượng tiến trình hoặc luồng con mà Apache có thể tạo. Số lượng tiến trình hoặc luồng con bạn nên tạo tùy thuộc vào lượng bộ nhớ và tài nguyên CPU có sẵn trên máy chủ của bạn.

Để tăng số lượng tiến trình hoặc luồng con, bạn cần sửa đổi các giá trị StartServers,  MaxClients,  MaxSpareServersvà  MinSpareServers trong tệp cấu hình Apache của mình.

StartServers là số tiến trình con được khởi chạy khi Apache khởi động. MaxClients là số lượng kết nối đồng thời tối đa mà Apache có thể xử lý. MaxSpareServers là số tiến trình con nhàn rỗi tối đa mà Apache duy trì. MinSpareServers là số tiến trình con nhàn rỗi tối thiểu mà Apache duy trì.

Ví dụ: để đặt  StartServers thành 10,  MaxClients thành 500,  MaxSpareServers thành 200 và  MinSpareServers thành 10, bạn có thể thêm các dòng sau vào tệp cấu hình Apache của mình:

StartServers 10
MaxClients 500
MaxSpareServers 200
MinSpareServers 10

Bạn cũng nên cân nhắc việc đặt  ServerLimitcó cùng giá trị với  MaxClients. Điều này đảm bảo rằng Apache không tạo ra nhiều tiến trình con hơn mức cần thiết.

Một tham số quan trọng khác có thể giúp tăng số lượng tiến trình/luồng con trong Apache là giá trị  MaxRequestWorkers . Giá trị này chỉ định số lượng yêu cầu đồng thời tối đa mà Apache có thể xử lý.

Theo mặc định,  MaxRequestWorkers giá trị được đặt thành 256. Tuy nhiên, giá trị này có thể tăng lên để cho phép Apache xử lý đồng thời nhiều yêu cầu hơn.

Để điều chỉnh  MaxRequestWorkers giá trị, bạn có thể thêm dòng sau vào tệp cấu hình Apache của mình:

MaxRequestWorkers 500

Trong ví dụ trên, chúng tôi đã đặt  MaxRequestWorkers giá trị thành 500, có nghĩa là Apache có thể xử lý tối đa 500 yêu cầu đồng thời.

Điều quan trọng cần lưu ý là việc tăng  MaxRequestWorkers giá trị cũng làm tăng dung lượng bộ nhớ được Apache sử dụng. Do đó, bạn nên đảm bảo rằng máy chủ của bạn có đủ bộ nhớ để xử lý các yêu cầu bổ sung.

III. Kích hoạt KeepAlive

Tính năng KeepAlive cho phép client sử dụng lại cùng một kết nối với máy chủ cho nhiều yêu cầu, giảm chi phí tạo kết nối mới cho mỗi yêu cầu. Kích hoạt KeepAlive có thể cải thiện đáng kể hiệu suất trang web của bạn.

Để bật KeepAlive, bạn cần đặt KeepAlive thành On. Bạn cũng nên đặt KeepAliveTimeout thành một giá trị phù hợp với trang web của mình. Ví dụ: để đặt thời gian chờ KeepAlive thành 5 giây, bạn có thể thêm các dòng sau vào tệp cấu hình Apache của mình:

KeepAlive On
KeepAliveTimeout 5
MaxKeepAliveRequests 100 

IV. Kích hoạt bộ nhớ đệm

Bộ nhớ đệm là quá trình lưu trữ dữ liệu được truy cập thường xuyên trong bộ nhớ hoặc trên đĩa, giảm số lượng yêu cầu cần được máy chủ xử lý. Kích hoạt bộ nhớ đệm có thể cải thiện đáng kể hiệu suất trang web của bạn, đặc biệt đối với nội dung tĩnh.

Apache cung cấp một số module bộ nhớ đệm, chẳng hạn như mod_cachevà mod_disk_cache. Để bật bộ nhớ đệm, bạn cần tải module bộ nhớ đệm thích hợp và định cấu hình nó trong tệp cấu hình Apache của bạn. Ví dụ: để bật bộ nhớ đệm nội dung tĩnh bằng cách sử dụng mod_disk_cache, bạn có thể thêm các dòng sau vào tệp cấu hình Apache của mình:

LoadModule cache_module modules/mod_cache.so
LoadModule disk_cache_module modules/mod_disk_cache.so
CacheEnable disk /
CacheRoot /var/cache/apache2/mod_disk_cache
CacheDirLevels 2
CacheDirLength 1

Những dòng này kích hoạt các module mod_cachevà mod_disk_cachevà định cấu hình bộ nhớ đệm cho thư mục gốc ( /) bằng bộ đệm đĩa. Lệnh này CacheRootchỉ định thư mục nơi nội dung được lưu trong bộ đệm sẽ được lưu trữ, đồng thời CacheDirLevelsCacheDirLengthkiểm soát cấu trúc phân cấp thư mục bộ đệm.

V. Sử dụng tính năng nén dữ liệu trong Apache

Nén là quá trình giảm kích thước dữ liệu được gửi qua mạng bằng cách loại bỏ thông tin dư thừa. Việc kích hoạt tính năng nén có thể làm giảm đáng kể lượng dữ liệu cần truyền đi, cải thiện hiệu suất trang web của bạn.

Apache cung cấp một module nén có tên mod_deflate. Để bật tính năng nén, bạn cần tải mod_deflatemodule và định cấu hình nó trong tệp cấu hình Apache của mình.

Ví dụ: để bật tính năng nén nội dung dựa trên văn bản, bạn có thể thêm các dòng sau vào tệp cấu hình Apache của mình:

LoadModule deflate_module modules/mod_deflate.so
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/javascript application/json

Những dòng này kích hoạt mod_deflate mô-đun và chỉ định loại nội dung cần được nén.

VI. Hạn chế quyền truy cập vào tài nguyên

Việc hạn chế quyền truy cập vào tài nguyên có thể giúp giảm tải cho máy chủ và cải thiện hiệu suất trang web của bạn. Bạn có thể giới hạn quyền truy cập vào tài nguyên bằng cách sử dụng các lệnh OrderAllowvà Denytrong tệp cấu hình Apache của mình.

Ví dụ: để giới hạn quyền truy cập vào thư mục có tên admin, bạn có thể thêm các dòng sau vào tệp cấu hình Apache của mình:

<Directory /var/www/html/admin>
    Order deny,allow
    Deny from all
    Allow from 192.168.0.0/24
</Directory>

Những dòng này chỉ định rằng quyền truy cập vào adminthư mục sẽ bị từ chối đối với tất cả các máy khách ngoại trừ những máy khách trong 192.168.0.0/24mạng con.

VII. Tối ưu hóa tài nguyên máy chủ

Ngoài việc tối ưu hóa Apache, bạn cũng có thể tối ưu hóa tài nguyên máy chủ để đảm bảo hiệu suất và tính khả dụng tối đa cho trang web của mình.

1. Tăng giới hạn bộ nhớ và đặt Opcache

Giới hạn bộ nhớ mặc định của tập lệnh PHP có thể không đủ để xử lý khối lượng lớn yêu cầu gửi đến. Bạn có thể tăng giới hạn bộ nhớ bằng cách sửa đổi  memory_limit lệnh trong tệp cấu hình PHP của mình.

Ngoài ra, bạn cũng có thể kích hoạt Opcache, đây là bộ đệm mã byte cho các tập lệnh PHP. Opcache lưu trữ bytecode tập lệnh được biên dịch sẵn trong bộ nhớ, giảm chi phí phân tích cú pháp và biên dịch tập lệnh cho mọi yêu cầu.

Cài đặt OPCache
# For CentOS, RedHat and Alma Linux use this command :
$ sudo yum install php-opcache
# For Ubuntu and Debian use this command :
$ sudo apt-get install php-opcache

Sau khi quá trình cài đặt hoàn tất, hãy khởi động lại Apache để áp dụng các thay đổi:

$ sudo systemctl restart apache2

Đó là nó! OPcache bây giờ sẽ được cài đặt và kích hoạt trên hệ thống Ubuntu của bạn. Bạn có thể xác minh rằng nó đã được bật bằng cách kiểm tra cấu hình PHP của bạn.

2. Thiết lập tệp Hoán đổi hoặc phân vùng Hoán đổi

Nếu máy chủ của bạn hết bộ nhớ, nó có thể bắt đầu sử dụng đĩa cứng làm bộ nhớ ảo, điều này có thể làm giảm đáng kể hiệu suất trang web của bạn. Bạn có thể tránh điều này bằng cách thiết lập tệp Hoán đổi hoặc phân vùng Hoán đổi, cung cấp thêm bộ nhớ ảo khi bộ nhớ vật lý cạn kiệt.

Để thiết lập tệp Hoán đổi, bạn có thể sử dụng các lệnh sau:

$ sudo fallocate -l 1G /swapfile
$ sudo chmod 600 /swapfile
$ sudo mkswap /swapfile
$ sudo swapon /swapfile

Các lệnh này tạo tệp Hoán đổi 1GB, đặt quyền cho tệp, định dạng tệp là Hoán đổi và bật Hoán đổi.

3. Kích hoạt tính năng nén GZIP

Kích hoạt tính năng nén GZIP có thể giảm kích thước dữ liệu được truyền qua mạng, cải thiện hiệu suất trang web của bạn. Bạn có thể kích hoạt tính năng nén GZIP bằng cách tải  deflatemodule trong Apache và định cấu hình nó trong tệp cấu hình Apache của bạn.

Để bật tính năng nén GZIP, bạn có thể sử dụng các lệnh sau:

$ sudo a2enmod deflate
$ sudo service apache2 restart

Các lệnh này kích hoạt  deflate mô-đun trong Apache và khởi động lại dịch vụ Apache. Sau khi  deflate mô-đun được bật, Apache sẽ tự động nén nội dung bằng GZIP khi máy khách hỗ trợ nó.

Như vậy Long Vân đã hướng dẫn Quý khách tối ưu cấu hình Apache cho website có lưu lượng cao. Chúc Quý khách thành công.