Kiến thức Hữu ích 😍

Cách cài đặt Module ngx pagespeed cho Nginx trên CentOS 7 để Tăng Tốc Trang


Tốc độ tải trang web có phải là yếu tố bạn đang trăn trở? Trong thế giới kỹ thuật số ngày nay, mỗi mili giây đều có giá trị. Tốc độ không chỉ ảnh hưởng trực tiếp đến trải nghiệm người dùng mà còn là một yếu tố xếp hạng quan trọng của các công cụ tìm kiếm như Google. Một trang web chậm chạp có thể khiến khách hàng tiềm năng rời đi trước khi họ kịp thấy sản phẩm của bạn. Đây chính là yếu tố then chốt quyết định sự thành công của một website.

Rất nhiều trang web hiện đang vận hành trên máy chủ Nginx, một web server mạnh mẽ và hiệu suất cao. Tuy nhiên, một thực tế đáng tiếc là nhiều quản trị viên vẫn chưa khai thác hết tiềm năng tối ưu của nó. Họ bỏ lỡ một công cụ cực kỳ hữu ích có thể tự động hóa việc tăng tốc trang web. Vấn đề này dẫn đến hiệu suất không đạt mức tối ưu, ảnh hưởng đến cả người dùng và thứ hạng SEO.

Giải pháp ở đây chính là module ngx_pagespeed. Đây là một module mở rộng cho Nginx được phát triển bởi Google, giúp tự động áp dụng các phương pháp tối ưu web tốt nhất. Nó có khả năng nén hình ảnh, tối ưu và gộp các file CSS, JavaScript, cùng nhiều kỹ thuật khác mà không cần bạn can thiệp vào mã nguồn. Bài viết này sẽ là kim chỉ nam, hướng dẫn bạn chi tiết từng bước để cài đặt và cấu hình module ngx_pagespeed trên Nginx chạy hệ điều hành CentOS 7, giúp bạn khai phá toàn bộ sức mạnh tốc độ cho website của mình.

Hình minh họa

Yêu cầu hệ thống và chuẩn bị môi trường trên CentOS 7

Trước khi đi vào cài đặt, việc chuẩn bị một môi trường tương thích là bước đầu tiên và quan trọng nhất. Điều này đảm bảo quá trình biên dịch và cài đặt diễn ra suôn sẻ, tránh các lỗi không đáng có. Hãy cùng AZWEB kiểm tra các yêu cầu về hệ thống và chuẩn bị những công cụ cần thiết.

Phiên bản CentOS và Nginx tương thích

Module ngx_pagespeed yêu cầu biên dịch cùng với mã nguồn của Nginx, do đó, việc lựa chọn phiên bản phù hợp là rất quan trọng. Bài hướng dẫn này tập trung vào CentOS 7, một trong những phiên bản hệ điều hành Linux là gì máy chủ ổn định và phổ biến nhất.

Về Nginx, bạn nên chọn các phiên bản ổn định (stable) mới nhất để đảm bảo tính tương thích và nhận được các bản vá bảo mật. Tại thời điểm viết bài, các phiên bản Nginx như 1.18.x, 1.20.x, hoặc mới hơn đều hoạt động tốt với ngx_pagespeed. Việc sử dụng phiên bản Nginx quá cũ có thể gây ra xung đột trong quá trình biên dịch. Đảm bảo rằng bạn đang sử dụng một phiên bản Nginx được cộng đồng hỗ trợ sẽ giúp quá trình tích hợp module diễn ra thuận lợi.

Công cụ và thư viện cần thiết trước khi cài đặt

Để biên dịch Nginx từ mã nguồn cùng với ngx_pagespeed, máy chủ CentOS 7 của bạn cần được trang bị một số công cụ phát triển và thư viện cần thiết. Nếu thiếu bất kỳ thành phần nào, quá trình biên dịch sẽ thất bại. Bạn có thể cài đặt tất cả chúng bằng một vài lệnh đơn giản.

Hãy mở terminal và chạy lệnh sau với quyền root để cài đặt các gói cần thiết:

yum install -y gcc-c++ pcre-devel zlib-devel openssl-devel

Hãy cùng phân tích chức năng của từng gói:

  • gcc-c++: Trình biên dịch C++, cần thiết để biên dịch mã nguồn của Nginx và ngx_pagespeed.
  • pcre-devel: Thư viện PCRE (Perl Compatible Regular Expressions), được Nginx sử dụng cho các quy tắc xử lý biểu thức chính quy trong cấu hình.
  • zlib-devel: Thư viện nén dữ liệu, cần thiết cho module gzip của Nginx.
  • openssl-devel: Bộ công cụ mã nguồn mở cho SSL/TLS, bắt buộc nếu bạn muốn website của mình chạy trên giao thức HTTPS.

Sau khi đã cài đặt xong các gói phụ thuộc này, môi trường của bạn đã sẵn sàng để chuyển sang bước tiếp theo: tải mã nguồn Nginx và ngx_pagespeed.

Hình minh họa

Hướng dẫn tải và biên dịch Nginx với module ngx_pagespeed

Khi môi trường đã sẵn sàng, chúng ta sẽ tiến hành tải mã nguồn của Nginx và module ngx_pagespeed. Bước này rất quan trọng vì chúng ta sẽ không cài đặt Nginx từ kho lưu trữ của CentOS mà sẽ tự biên dịch để thêm module tùy chỉnh vào.

Download mã nguồn Nginx và ngx_pagespeed

Đầu tiên, bạn cần tải về phiên bản Nginx ổn định mới nhất. Bạn có thể truy cập trang chủ của Nginx để tìm phiên bản mới nhất, sau đó dùng lệnh wget để tải về. Ví dụ, để tải phiên bản 1.20.2:

cd /usr/local/src
wget http://nginx.org/download/nginx-1.20.2.tar.gz

Sau khi tải xong, hãy giải nén file này:

tar -zxvf nginx-1.20.2.tar.gz

Tiếp theo, chúng ta cần tải mã nguồn của module ngx_pagespeed. Bạn có thể tìm phiên bản mới nhất trên trang Github của dự án.

wget https://github.com/apache/incubator-pagespeed-ngx/archive/v1.13.35.2-stable.tar.gz

Giải nén file module vừa tải về:

tar -zxvf v1.13.35.2-stable.tar.gz

Bên trong module ngx_pagespeed còn có một thư viện lõi khác cần được tải về. Hãy di chuyển vào thư mục module và chạy lệnh tải về:

cd incubator-pagespeed-ngx-1.13.35.2-stable/
wget https://dl.google.com/dl/page-speed/psol/1.13.35.2-x64.tar.gz
tar -xzvf 1.13.35.2-x64.tar.gz

Bây giờ, tất cả các file mã nguồn cần thiết đã sẵn sàng cho quá trình biên dịch.

Hình minh họa

Biên dịch Nginx với cấu hình thêm module ngx_pagespeed

Đây là bước cốt lõi của quá trình cài đặt. Chúng ta sẽ cấu hình Nginx trước khi biên dịch và chỉ định đường dẫn đến module ngx_pagespeed để tích hợp nó vào.

Đầu tiên, di chuyển vào thư mục mã nguồn Nginx đã giải nén:

cd /usr/local/src/nginx-1.20.2/

Bây giờ, hãy chạy lệnh ./configure. Lệnh này sẽ kiểm tra hệ thống và tạo ra các file cần thiết cho việc biên dịch. Điều quan trọng nhất là thêm tham số --add-module và trỏ đến thư mục mã nguồn của ngx_pagespeed.

./configure --prefix=/etc/nginx \
--sbin-path=/usr/sbin/nginx \
--modules-path=/usr/lib64/nginx/modules \
--conf-path=/etc/nginx/nginx.conf \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--pid-path=/var/run/nginx.pid \
--lock-path=/var/run/nginx.lock \
--with-http_ssl_module \
--with-http_v2_module \
--add-module=/usr/local/src/incubator-pagespeed-ngx-1.13.35.2-stable

Sau khi lệnh configure chạy thành công mà không có lỗi, bạn hãy tiến hành biên dịch và cài đặt bằng hai lệnh sau:

make
make install

Quá trình này có thể mất vài phút. Khi hoàn tất, Nginx đã được cài đặt với module ngx_pagespeed tích hợp sẵn. Để kiểm tra lại, bạn có thể chạy lệnh nginx -V. Kết quả trả về phải chứa dòng --add-module=... với đường dẫn đến ngx_pagespeed.

Cấu hình module ngx_pagespeed trong file cấu hình Nginx

Sau khi biên dịch và cài đặt thành công, Nginx của bạn đã được tích hợp ngx_pagespeed. Tuy nhiên, module này chưa được kích hoạt. Bước tiếp theo là cấu hình để nó bắt đầu tối ưu website của bạn. Mọi cấu hình sẽ được thực hiện trong file nginx.conf hoặc trong các file cấu hình virtual host của bạn.

Các lệnh cấu hình cơ bản

Để bắt đầu, bạn chỉ cần một vài chỉ thị (directive) đơn giản để kích hoạt ngx_pagespeed. Hãy mở file cấu hình Nginx của bạn (thường là /etc/nginx/nginx.conf) và thêm các dòng sau vào trong khối server { ... }:

# Kích hoạt module
pagespeed on;

# Chỉ định thư mục cache cho pagespeed
pagespeed FileCachePath /var/ngx_pagespeed_cache;

Dòng pagespeed on; có chức năng bật module cho trang web trong khối server đó. Dòng pagespeed FileCachePath cực kỳ quan trọng, nó yêu cầu ngx_pagespeed tạo một thư mục để lưu trữ các tài nguyên đã được tối ưu (như hình ảnh, CSS, JS đã nén). Điều này giúp Nginx không phải tối ưu lại tài nguyên trong mỗi lần có yêu cầu, từ đó tăng tốc độ phản hồi.

Bạn cần đảm bảo rằng thư mục /var/ngx_pagespeed_cache tồn tại và người dùng chạy Nginx (thường là nginx hoặc www-data) có quyền ghi vào đó. Bạn có thể tạo và cấp quyền cho thư mục này bằng các lệnh:

mkdir /var/ngx_pagespeed_cache
chown -R nginx:nginx /var/ngx_pagespeed_cache

Hình minh họa

Tùy chỉnh nâng cao

Sức mạnh thực sự của ngx_pagespeed nằm ở các bộ lọc (filters) mà bạn có thể tùy chỉnh. Các bộ lọc này cho phép bạn kiểm soát chính xác những loại tối ưu nào sẽ được áp dụng. Mặc định, ngx_pagespeed đã bật một nhóm bộ lọc cơ bản gọi là core-filters. Tuy nhiên, bạn có thể bật thêm các bộ lọc khác để tối ưu mạnh mẽ hơn.

Dưới đây là một vài ví dụ về các bộ lọc nâng cao hữu ích bạn có thể thêm vào khối server { ... }:

# Bật các bộ lọc bổ sung ngoài core-filters
pagespeed RewriteLevel PassThrough;

# Bật các bộ lọc cụ thể
pagespeed EnableFilters rewrite_images; # Tối ưu hóa hình ảnh
pagespeed EnableFilters lazyload_images; # Bật tính năng lazy load cho ảnh
pagespeed EnableFilters combine_css,combine_javascript; # Gộp các file CSS và JS
pagespeed EnableFilters collapse_whitespace; # Xóa các khoảng trắng thừa trong HTML
pagespeed EnableFilters convert_jpeg_to_webp; # Chuyển ảnh JPEG sang định dạng WebP hiện đại

Với cấu hình RewriteLevel PassThrough, bạn sẽ tắt bộ core-filters mặc định và chỉ bật những bộ lọc bạn chỉ định qua EnableFilters. Cách này giúp bạn kiểm soát hoàn toàn quá trình tối ưu. Ví dụ, combine_css sẽ gộp nhiều file CSS thành một, giảm số lượng yêu cầu HTTP. lazyload_images sẽ trì hoãn việc tải các hình ảnh không nằm trong màn hình đầu tiên, giúp trang tải ban đầu nhanh hơn đáng kể. Hãy lựa chọn các bộ lọc phù hợp với nhuá cầu website của bạn.

Hình minh họa

Kiểm tra và khởi động lại dịch vụ Nginx sau khi cấu hình

Bất cứ khi nào bạn thay đổi file cấu hình của Nginx, bạn không nên khởi động lại dịch vụ ngay lập tức. Một lỗi cú pháp nhỏ cũng có thể khiến Nginx không thể khởi động, gây gián đoạn hoạt động của website. Vì vậy, bước kiểm tra cấu hình là vô cùng cần thiết.

Để kiểm tra xem file cấu hình của bạn có hợp lệ hay không, hãy chạy lệnh sau:

nginx -t

Nếu mọi thứ đều đúng, bạn sẽ nhận được một thông báo tương tự như:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Nếu có lỗi, terminal sẽ chỉ rõ lỗi nằm ở dòng nào và file nào, giúp bạn dễ dàng sửa chữa. Chỉ sau khi nhận được thông báo thành công, bạn mới nên áp dụng cấu hình mới.

Để áp dụng các thay đổi, bạn có thể sử dụng lệnh reload hoặc restart. Lệnh reload sẽ nạp lại cấu hình mới một cách mượt mà mà không làm gián đoạn các kết nối hiện tại. Đây là lựa chọn được khuyến khích trên môi trường production.

systemctl reload nginx

Trong trường hợp bạn cần khởi động lại toàn bộ dịch vụ, hãy dùng lệnh restart:

systemctl restart nginx

Sau khi Nginx đã khởi động lại, làm thế nào để biết ngx_pagespeed đang hoạt động? Cách đơn giản nhất là kiểm tra header HTTP của trang web. Bạn có thể dùng công cụ Developer Tools của trình duyệt (F12) hoặc lệnh curl.

curl -I -p http://your_domain.com

Trong kết quả trả về, nếu bạn thấy một dòng header X-Page-Speed, điều đó có nghĩa là module đã hoạt động và đang tối ưu trang của bạn. Đồng thời, hãy kiểm tra thư mục cache (/var/ngx_pagespeed_cache) để xem các file đã được tạo ra hay chưa và theo dõi file log lỗi của Nginx (/var/log/nginx/error.log) để phát hiện các vấn đề phát sinh.

Hình minh họa

Các mẹo tối ưu hiệu năng khi sử dụng ngx_pagespeed

Cài đặt và kích hoạt ngx_pagespeed chỉ là bước khởi đầu. Để khai thác tối đa hiệu năng của nó, bạn cần áp dụng một vài chiến lược thông minh. Việc cấu hình không hợp lý có thể gây tốn tài nguyên máy chủ một cách không cần thiết.

Một trong những yếu tố quan trọng nhất là sử dụng chế độ cache hợp lý. Thư mục FileCachePath mà chúng ta đã cấu hình giúp lưu trữ các tài nguyên đã được tối ưu. Hãy đảm bảo phân vùng chứa thư mục cache có đủ dung lượng và tốc độ đọc/ghi nhanh (ví dụ: ổ SSD). Bạn cũng có thể tinh chỉnh kích thước cache và thời gian dọn dẹp để phù hợp với lượng truy cập của website, tránh việc cache quá đầy hoặc hết hạn quá nhanh.

ngx_pagespeed hoạt động hiệu quả hơn khi được kết hợp với các công nghệ tối ưu khác. Hãy đảm bảo rằng bạn đã bật tính năng nén gzip (hoặc brotli) trong Nginx. Gzip giúp nén các tài nguyên văn bản như HTML, CSS, JS trước khi gửi đến trình duyệt. Khi kết hợp, ngx_pagespeed sẽ tối ưu nội dung file, sau đó gzip sẽ nén file đó lại, tạo ra hiệu quả kép. Hơn nữa, việc kích hoạt giao thức HTTP/2 cũng giúp tăng tốc đáng kể nhờ khả năng xử lý nhiều yêu cầu song song trên một kết nối duy nhất.

Cuối cùng, đừng quên theo dõi và phân tích. ngx_pagespeed cung cấp các trang thống kê và quản trị, cho phép bạn xem hiệu quả của các bộ lọc và tình trạng cache. Hãy thường xuyên kiểm tra log lỗi của Nginx để phát hiện các vấn đề tiềm ẩn liên quan đến ngx_pagespeed. Dựa vào dữ liệu thu thập được, bạn có thể tinh chỉnh các bộ lọc, bật hoặc tắt những tính năng không cần thiết để đạt được sự cân bằng hoàn hảo giữa tốc độ và tài nguyên máy chủ.

Hình minh họa

Giải quyết lỗi thường gặp và cách khắc phục

Trong quá trình cài đặt và cấu hình ngx_pagespeed, bạn có thể gặp phải một số lỗi phổ biến. Hiểu rõ nguyên nhân và cách khắc phục sẽ giúp bạn tiết kiệm rất nhiều thời gian và công sức. Dưới đây là hai nhóm lỗi thường gặp nhất.

Lỗi không tải được module ngx_pagespeed

Đây là lỗi xảy ra khi Nginx khởi động nhưng không tìm thấy hoặc không thể nạp module ngx_pagespeed. Nguyên nhân thường xuất phát từ quá trình biên dịch hoặc cấu hình ban đầu.

  • Kiểm tra quá trình biên dịch: Lỗi phổ biến nhất là quên thêm tham số --add-module khi chạy lệnh ./configure. Hãy chạy lại lệnh nginx -V để chắc chắn rằng module đã được biên dịch cùng Nginx. Nếu không thấy, bạn cần phải biên dịch lại từ đầu.
  • Sai đường dẫn file: Nếu bạn biên dịch ngx_pagespeed dưới dạng module động (--add-dynamic-module), bạn cần đảm bảo chỉ thị load_module trong file nginx.conf trỏ đúng đến file .so của module.
  • Vấn đề quyền truy cập: Đây là một nguyên nhân hay bị bỏ qua. Hãy kiểm tra quyền của thư mục cache (/var/ngx_pagespeed_cache). Người dùng chạy Nginx (thường là nginx) phải có quyền đọc và ghi trên thư mục này. Sử dụng lệnh chownchmod để cấp quyền chính xác.

Lỗi cấu hình syntax hoặc xung đột module

Lỗi này xảy ra sau khi bạn đã chỉnh sửa file nginx.conf và Nginx không thể khởi động lại.

  • Lỗi cú pháp (Syntax Error): Luôn chạy nginx -t trước khi reload hoặc restart. Công cụ này sẽ chỉ ra chính xác dòng lệnh bị sai cú pháp trong file cấu hình của bạn. Lỗi thường gặp là thiếu dấu chấm phẩy ;, sai tên chỉ thị, hoặc đặt chỉ thị sai vị trí (ví dụ: đặt pagespeed bên ngoài khối server).
  • Xung đột module: ngx_pagespeed có thể xung đột với các module bên thứ ba khác, đặc biệt là những module cũng có chức năng sửa đổi nội dung HTML. Nếu bạn nghi ngờ có xung đột, hãy thử vô hiệu hóa tạm thời các module khác để xác định nguyên nhân.
  • Phiên bản không tương thích: Đôi khi, phiên bản ngx_pagespeed bạn tải về không hoàn toàn tương thích với phiên bản Nginx của bạn. Hãy kiểm tra tài liệu của ngx_pagespeed để đảm bảo bạn đang sử dụng các phiên bản được khuyến nghị. Nếu cần, hãy thử hạ cấp hoặc nâng cấp một trong hai để tìm ra sự kết hợp ổn định. Việc phân tích kỹ file /var/log/nginx/error.log thường cung cấp những manh mối quan trọng nhất để chẩn đoán lỗi.

Hình minh họa

Các thực hành tốt nhất khi sử dụng ngx_pagespeed

Để đảm bảo hệ thống của bạn hoạt động ổn định và hiệu quả lâu dài, việc tuân thủ các thực hành tốt nhất khi làm việc với ngx_pagespeed là vô cùng quan trọng. Những nguyên tắc này giúp giảm thiểu rủi ro và tối ưu hóa quy trình quản trị.

Đầu tiên và quan trọng nhất: luôn sao lưu cấu hình trước khi thay đổi. Chỉ một sai sót nhỏ trong file nginx.conf cũng có thể khiến toàn bộ website của bạn ngừng hoạt động. Hãy tạo một bản sao của file cấu hình hiện tại trước khi bạn thêm hoặc chỉnh sửa bất kỳ chỉ thị nào liên quan đến ngx_pagespeed. Thói quen đơn giản này có thể cứu bạn khỏi nhiều giờ khắc phục sự cố.

Thứ hai, luôn kiểm thử trên môi trường staging trước khi triển khai lên production. Môi trường staging là một bản sao của môi trường chạy thật, nơi bạn có thể thử nghiệm các thay đổi mà không ảnh hưởng đến người dùng cuối. Hãy bật các bộ lọc mới, tinh chỉnh thông số cache trên staging, và sử dụng các công cụ như Hệ điều hành Ubuntu là gì, GTmetrix để đo lường tác động. Chỉ khi nào bạn chắc chắn rằng thay đổi mang lại hiệu quả tích cực và không gây ra lỗi, hãy áp dụng chúng cho máy chủ production.

Thứ ba, định kỳ cập nhật phiên bản Nginx và ngx_pagespeed. Các phiên bản mới không chỉ mang lại những tính năng tối ưu tốt hơn mà còn chứa các bản vá lỗi và bảo mật quan trọng. Hãy theo dõi các thông báo phát hành từ Nginx và dự án ngx_pagespeed để không bỏ lỡ những cập nhật quan trọng.

Cuối cùng, tránh bật quá nhiều tính năng cùng một lúc. ngx_pagespeed có hàng chục bộ lọc khác nhau. Việc bật tất cả chúng có thể gây ra tác dụng ngược, làm tăng gánh nặng CPU cho máy chủ một cách không cần thiết và thậm chí có thể làm hỏng giao diện website. Hãy tiếp cận một cách từ từ: bắt đầu với bộ core-filters, sau đó bật thêm từng bộ lọc một và đo lường hiệu quả của nó. Tối ưu hóa là một quá trình liên tục, không phải là một hành động làm một lần.

Hình minh họa

Kết luận

Qua bài hướng dẫn chi tiết này, chúng ta đã cùng nhau đi qua toàn bộ quá trình từ chuẩn bị môi trường, biên dịch, cài đặt cho đến cấu hình và tối ưu module ngx_pagespeed trên máy chủ Nginx chạy CentOS 7. Việc tích hợp thành công ngx_pagespeed không chỉ là một nhiệm vụ kỹ thuật, mà còn là một bước tiến chiến lược trong việc nâng cao chất lượng website của bạn. Lợi ích mà nó mang lại là vô cùng rõ rệt: tốc độ tải trang nhanh hơn, trải nghiệm người dùng mượt mà hơn và điểm số SEO được cải thiện đáng kể.

Bằng cách tự động hóa các tác vụ tối ưu phức tạp như nén ảnh, gộp file CSS/JS và nhiều kỹ thuật khác, ngx_pagespeed giúp bạn tiết kiệm thời gian và công sức, để bạn có thể tập trung vào việc phát triển nội dung và kinh doanh. Chúng tôi khuyến khích bạn áp dụng ngay module mạnh mẽ này vào hệ thống của mình. Đừng để tốc độ trở thành rào cản ngăn cách bạn với khách hàng.

Hành trình tối ưu hóa vẫn chưa kết thúc. Sau khi cài đặt thành công, bước tiếp theo bạn nên tìm hiểu là cách sử dụng các công cụ giám sát hiệu suất để theo dõi tác động của ngx_pagespeed và tiếp tục tinh chỉnh các bộ lọc nâng cao để đạt được kết quả tốt nhất có thể. Chúc bạn thành công

Đánh giá