Cách tiết kiệm lưu lượng truy cập với mod_deflate của Apache2

theanh

Administrator
Nhân viên
Trong hướng dẫn này, tôi sẽ mô tả cách cài đặt và cấu hình mod_deflate trên máy chủ web Apache2. mod_deflate cho phép Apache2 nén các tệp và phân phối chúng đến các máy khách (ví dụ: trình duyệt) có thể xử lý nội dung đã nén mà hầu hết các trình duyệt hiện đại đều thực hiện. Với mod_deflate, bạn có thể nén các tệp HTML, văn bản hoặc XML thành xấp xỉ 20 - 30% kích thước ban đầu của chúng, do đó giúp bạn tiết kiệm lưu lượng máy chủ và khiến người dùng modem của bạn hài lòng hơn.

Nén tệp khiến máy chủ phải chịu tải cao hơn một chút, nhưng theo kinh nghiệm của tôi, điều này được bù đắp bằng thực tế là thời gian kết nối của máy khách với máy chủ của bạn giảm đi rất nhiều. Ví dụ, người dùng modem cần bảy giây để tải xuống tệp HTML chưa nén thì giờ đây chỉ cần hai giây cho cùng một tệp đó nhưng đã nén.

Bằng cách sử dụng mod_deflate, bạn không phải lo rằng mình sẽ loại trừ những người dùng có trình duyệt cũ không thể xử lý nội dung đã nén. Trình duyệt sẽ thương lượng với máy chủ trước khi bất kỳ tệp nào được truyền đi và nếu trình duyệt không thể xử lý nội dung đã nén, máy chủ sẽ phân phối các tệp không nén.

mod_deflate đã thay thế mod_gzip của Apache 1.3 trong Apache2. Nếu bạn muốn phục vụ các tệp đã nén bằng Apache 1.3, hãy xem hướng dẫn này: mod_gzip - phục vụ nội dung đã nén bằng máy chủ web Apache

Trước tiên, tôi muốn nói rằng đây không phải là cách duy nhất để thiết lập một hệ thống như vậy. Có nhiều cách để đạt được mục tiêu này nhưng đây là cách tôi thực hiện. Tôi không đưa ra bất kỳ đảm bảo nào rằng cách này sẽ hiệu quả với bạn!

1 Bật mod_deflate​

Nếu bạn đã cài đặt Apache2, mod_deflate cũng phải được cài đặt trên hệ thống của bạn. Bây giờ chúng ta phải bật nó. Trên Debian, chúng ta có thể thực hiện như sau:
Mã:
a2enmod deflate
Sau đó khởi động lại Apache2:
Mã:
service apache2 restart
Trên các bản phân phối khác, bạn có thể phải chỉnh sửa cấu hình Apache2 theo cách thủ công để bật mod_deflate. Bạn có thể phải thêm một dòng như thế này vào phần LoadModule:
Mã:
LoadModule deflate_module /usr/lib/apache2/modules/mod_deflate.so
Đảm bảo bạn điều chỉnh đường dẫn đến mod_deflate.so và khởi động lại Apache2 sau đó.

2 Cấu hình mod_deflate​

Có thể cấu hình nén tệp theo một trong hai cách sau: loại trừ rõ ràng các tệp theo phần mở rộng hoặc bao gồm rõ ràng các tệp theo loại MIME. Bạn có thể bật mod_deflate cho toàn bộ máy chủ Apache2 của mình hoặc chỉ cho các trang web ảo cụ thể. Tùy thuộc vào điều này, hãy mở phần cấu hình máy chủ toàn cầu của Apache2 ngay bây giờ hoặc chỉ phần cấu hình vhost nơi bạn muốn bật mod_deflate.

2.1 Bao gồm rõ ràng các tệp theo loại MIME​

Nếu bạn chỉ muốn nén các tệp HTML, văn bản và XML, hãy thêm dòng này vào cấu hình của bạn:
Mã:
AddOutputFilterByType DEFLATE text/html text/plain text/xml
Đây là cấu hình tôi đang sử dụng vì tôi không muốn nén hình ảnh hoặc tệp PDF hoặc các tệp đã nén như tệp zip.

2.2 Loại trừ rõ ràng các tệp theo phần mở rộng​

Nếu bạn muốn nén tất cả các loại tệp và chỉ loại trừ một số ít, bạn sẽ thêm nội dung như thế này vào cấu hình của mình (thay vì dòng từ phần 2.1):
Mã:
SetOutputFilter DEFLATE
SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ \
 no-gzip dont-vary
SetEnvIfNoCase Request_URI \
 \.(?:exe|t?gz|zip|bz2|sit|rar)$ \
 no-gzip dont-vary
SetEnvIfNoCase Request_URI \.pdf$ no-gzip dont-vary
Điều này sẽ nén tất cả các tệp ngoại trừ hình ảnh (gif, jpg và png), các tệp đã nén (như zip và tar.gz) và các tệp PDF, điều này hợp lý vì bạn không thu được nhiều lợi ích khi nén các loại tệp này.

2.3 Các chỉ thị cấu hình khác​

Bất kể cho dù bạn sử dụng cấu hình từ phần 2.1 hay 2.2, bạn cũng nên thêm những dòng này vào cấu hình của mình:
Mã:
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
Những dòng này dành cho một số trình duyệt cũ không hỗ trợ nén các tệp khác ngoài tài liệu HTML.

Cấu hình hiện đã hoàn tất và bây giờ bạn phải khởi động lại Apache2. Trên Debian, bạn thực hiện như sau:
Mã:
service apache2 restart
Để tìm hiểu thêm về các chỉ thị cấu hình, hãy xem Apache Module mod_deflate.

3 Kiểm tra​

Để kiểm tra khả năng nén, chúng tôi thêm một số chỉ thị vào cấu hình mod_deflate để ghi lại tỷ lệ nén của các tệp đã phân phối. Mở cấu hình mod_deflate của bạn và thêm các dòng sau:
Mã:
DeflateFilterNote Input input_info
DeflateFilterNote Output output_info
DeflateFilterNote Ratio ratio_info
LogFormat '"%r" %{output_info}n/%{input_info}n (%{ratio_info}n%%)' deflate
CustomLog /var/log/apache2/deflate_log deflate
Đảm bảo bạn thay thế /var/log/apache2 bằng thư mục nhật ký của Apache2. Thư mục này có thể là /var/log/httpd, /var/log/httpd2, v.v.

Sau đó khởi động lại Apache2. Trên Debian, hãy làm như thế này:
Mã:
service apache2 restart
Bây giờ bất cứ khi nào một tệp được yêu cầu, tệp này sẽ được ghi vào /var/log/apache2/deflate_log (hoặc vào bất kỳ tệp nào bạn đã thay đổi thành). Một dòng nhật ký thông thường trông như thế này:
Mã:
"GET /info.php HTTP/1.1" 7621/45430 (16%)
Bạn thấy rằng tệp info.php đã được yêu cầu và gửi đi. Kích thước ban đầu của nó là 45430 byte và đã được nén xuống còn 7621 byte hoặc 16% kích thước ban đầu! Đây là một kết quả tuyệt vời và nếu trang web của bạn chủ yếu bao gồm các tệp HTML, văn bản và XML, mod_deflate sẽ giúp bạn tiết kiệm rất nhiều lưu lượng truy cập và đối với những người dùng có kết nối băng thông thấp, trang web của bạn sẽ tải nhanh hơn nhiều.

Nếu bạn không cần ghi nhật ký nữa sau khi thử nghiệm, bạn có thể hoàn tác các thay đổi từ phần 3 và khởi động lại Apache2.

4 Liên kết​

 
Back
Bên trên