Cài đặt Nginx FastCGI Cache để giảm thời gian phản hồi của máy chủ WordPress

Trong bài viết này, HOSTVN sẽ hướng dẫn các bạn cách cài đặt Nginx FastCGI Cache giúp giảm tải máy chủ và giúp website của bạn load nhanh hơn.

Cài đặt Nginx FastCGI Cache – Nginx là một trong những máy chủ web phổ biến nhất trên thế giới và có khả năng phục vụ các trang web với dung lượng lớn. Nó tiết kiệm tài nguyên hệ thống hơn Apache và có thể được sử dụng làm máy chủ web hoặc proxy ngược.

Trong bài viết này, HOSTVN sẽ hướng dẫn các bạn cách cài đặt Nginx FastCGI Cache giúp giảm tải máy chủ và giúp website của bạn load nhanh hơn.

Hướng dẫn cài đặt Nginx FastCGI Cache

1. Nginx FastCGI Cache là gì?

Nginx được cấu hình để chuyển yêu cầu PHP sang PHP-FPM vì bản thân Nginx không thể xử lý mã PHP. Hãy cùng tìm hiểu cách mà LEMP hoạt động.

  1. Các trình duyệt web gửi yêu cầu HTTP đến Nginx.
  2. Nếu Nginx tìm thấy mã PHP, nó sẽ chuyển yêu cầu tới PHP-FPM để xử lý mã PHP.
  3. Nếu cần, PHP-FPM sẽ truy vấn cơ sở dữ liệu MySQL/MariaDB để lấy những gì nó cần.
  4. PHP-FPM tạo ra một trang HTML tĩnh, sau đó trả lại cho Nginx.
  5. Cuối cùng, Nginx gửi trang HTML tĩnh tới trình duyệt web.

Nginx hoạt động cực nhanh khi phục vụ các trang HTML tĩnh. Thay vì chuyển yêu cầu trang động tới PHP-FPM, Nginx có thể lưu trữ trang HTML đã tạo để lần sau nó có thể gửi các trang được lưu trong bộ nhớ cache tới trình duyệt web.

  • Điều này có thể cải thiện đáng kể thời gian phản hồi của máy chủ và giảm tải cho PHP-FPM và MySQL/MariaDB.
  • Nó cũng cho phép Nginx phục vụ các trang web từ bộ đệm khi máy chủ cơ sở dữ liệu PHP-FPM gặp vấn đề (MySQL/MariaDB thường sẽ không hoạt động khi máy chủ Linux của bạn hết dung lượng).

FastCGI là giao thức giữa Nginx và PHP-FPM nên cache được gọi là FastCGI Cache.

2. Cách cấu hình Nginx FastCGI Cache

2.1. Bước 1: Cài đặt LEMP Stack

Việc đầu tiên các bạn cần làm là cài đặt LEMP Stack trên máy chủ của mình. Nếu bạn chưa cài đặt LEMP Stack hãy tham khảo hướng dẫn cài đặt LEMP của HOSTVN:

2.2. Bước 2: Chỉnh sửa tập tin cấu hình chính của Nginx

Chỉnh sửa tập tin cấu hình chính Nginx /etc/nginx/nginx.conf.

nano /etc/nginx/nginx.conf

Trong http block, các bạn thêm 2 dòng sau:

fastcgi_cache_path /etc/nginx/cache levels=1:2 keys_zone=phpcache:100m max_size=10g inactive=60m use_temp_path=off;
fastcgi_cache_key "$scheme$request_method$host$request_uri";

Screenshot_46 - Cài đặt Nginx FastCGI Cache

Lệnh fastcgi_cache_path sẽ tạo bộ đệm FastCGI. Lệnh này chỉ khả dụng trong block http của tệp cấu hình Nginx.

  • Đối số đầu tiên chỉ định vị trí lưu cache (/etc/nginx/cache/).
  • Tham số level thiết lập hệ thống phân cấp thư mục hai cấp dưới /etc/nginx/cache/. Nếu có quá nhiều tệp trong một thư mục có thể làm chậm việc truy cập tệp, vì vậy HOSTVN khuyên bạn nên sử dụng thư mục hai cấp . Nếu tham số level không được cấu hình, Nginx sẽ đặt tất cả các tệp trong cùng một thư mục.
  • Đối số thứ 3 chỉ định tên của tên vùng nhớ chung (phpcache) và kích thước của nó (100M). Vùng nhớ này để lưu trữ các khóa bộ đệm và siêu dữ liệu như thời gian sử dụng. Có một bản sao của các phím trong bộ nhớ cho phép Nginx nhanh chóng xác định xem yêu cầu là HIT hay MISS mà không cần phải vào đĩa, giúp tăng tốc đáng kể việc kiểm tra. Vùng 1 MB có thể lưu trữ dữ liệu cho khoảng 8.000 khóa, vì vậy vùng 100 MB có thể lưu trữ dữ liệu cho khoảng 800.000 khóa.
  • max_size đặt giới hạn tối đa của kích thước bộ đệm (10GB trong ví dụ này). Nếu không được chỉ định, bộ đệm có thể sử dụng tất cả dung lượng đĩa còn lại. Khi bộ đệm đạt kích thước tối đa, trình quản lý bộ đệm Nginx sẽ xóa các tệp được sử dụng gần đây nhất khỏi bộ đệm.
  • inactive : Dữ liệu không được truy cập trong khoảng thời gian không hoạt động (60 phút) sẽ được trình quản lý bộ đệm xóa khỏi bộ đệm, bất kể nó đã hết hạn hay chưa. Giá trị mặc định là 10 phút. Bạn cũng có thể sử dụng các giá trị như 12h (12 giờ) và 7d (7 ngày).
  • use_temp_path: Đầu tiên Nginx ghi các tệp được định sẵn cho bộ đệm vào vùng lưu trữ tạm thời (/var/lib/nginx/fastcgi/). use_temp_path = off bắt buộc Nginx ghi chúng trực tiếp vào thư mục bộ đệm để tránh việc sao chép dữ liệu không cần thiết giữa các hệ thống tệp.

Lệnh thứ hai fastcgi_cache_key xác định khóa để tra cứu bộ đệm. Nginx sẽ áp dụng hàm băm MD5sum trên khóa bộ đệm và sử dụng kết quả băm làm tên của các tệp bộ đệm. Sau khi nhập hai chỉ thị trong block http, lưu và đóng tệp.

Sau đó các bạn tiến hành tạo thư mục chứa cache và phân quyền cho nó

mkdir -p /etc/nginx/cache
chown -R nginx:nginx /etc/nginx/cache

2.3. Bước 3: Chỉnh sửa Server Block

Tiếp theo mở tập tin cấu hình Server Block (Vhost) của bạn.

nano /etc/nginx/conf.d/your-domain.conf

Cuộn xuống vị trí ~.php$. Thêm các dòng sau trong phần này.

fastcgi_cache phpcache;
fastcgi_cache_valid 200 301 302 60m;
fastcgi_cache_use_stale error timeout updating invalid_header http_500 http_503;
fastcgi_cache_min_uses 1;
fastcgi_cache_lock on;
add_header X-FastCGI-Cache $upstream_cache_status;

Screenshot_48

  • Lệnh fastcgi_cache cho phép lưu vào bộ đệm, sử dụng vùng nhớ được tạo trước đó bởi lệnh fastcgi_cache_path.
  • Fastcgi_cache_valid đặt thời gian bộ đệm tùy thuộc vào mã trạng thái HTTP. Trong ví dụ trên, các phản hồi với mã trạng thái 200, 301, 302 sẽ được lưu trong 60 phút. Bạn cũng có thể sử dụng khoảng thời gian như 12h (12 giờ) và 7ngày (7 ngày).
  • Nginx có thể phân phối nội dung cũ từ bộ đệm của nó khi nó nhận được nội dung cập nhật từ máy chủ PHP-FPM. Ví dụ: khi máy chủ cơ sở dữ liệu MySQL/MariaDB ngừng hoạt động. Thay vì chuyển lỗi cho khách hàng, Nginx có thể cung cấp phiên bản cũ của tệp từ bộ đệm của nó. Để kích hoạt chức năng này, chúng tôi đã thêm fastcgi_cache_use_stale.
  • fastcgi_cache_min_uses đặt số lần một mục mà khách hàng phải yêu cầu trước khi Nginx lưu trữ nó. Giá trị mặc định là 1.
  • Khi bật fastcgi_cache_lock, nếu nhiều máy khách yêu cầu một tệp không có trong bộ đệm, chỉ những yêu cầu đầu tiên trong số đó mới được phép thông qua máy chủ PHP-FPM. Các yêu cầu còn lại chờ yêu cầu đó được bão hòa và sau đó sử dụng tệp từ trong bộ đệm. Nếu không bật fastcgi_cache_lock, tất cả các yêu cầu sẽ được chuyển thẳng đến máy chủ PHP-FPM .
  • Dòng thứ 3 thêm tiêu đề X-FastCGI-Cache trong phản hồi HTTP. Nó có thể được sử dụng để xác thực xem yêu cầu đã được phục vụ từ bộ đệm FastCGI hay chưa.

Bây giờ lưu và đóng tệp cấu hình Server Block (Vhost). Sau đó kiểm tra cấu hình Nginx của bạn.

nginx -t

Nếu không có lỗi nào được thông báo hãy tải lại Nginx.

service nginx reload

2.4. Bước 4: Kiểm tra Nginx FastCGI Cache

Tải lại trang chủ của bạn một vài lần. Sau đó sử dụng curl để lấy tiêu đề phản hồi http.

curl -I http://your-domain.com

Screenshot_51

Hãy xem tiêu đề X-FastCGI-Cache. HIT cho biết phản hồi đã được phục vụ từ bộ đệm.

2.5. Bước 5: Cấu hình loại trừ cache

Phiên đăng nhập, cookie POST request, chuỗi truy vấn, back-end WordPress, sitemap, Feed…. không nên được lưu trữ trong bộ đệm. Để tắt bộ đệm ẩn cho các mục trên, hãy tạo file /etc/nginx/custom/nginx-cache.conf

mkdir -p /etc/nginx/custom
nano /etc/nginx/custom/nginx-cache.conf

Dán nội dung sau vào file

set $skip_cache 0;

# POST requests and urls with a query string should always go to PHP
if ($request_method = POST) {
    set $skip_cache 1;
}
if ($query_string != "") {
    set $skip_cache 1;
}

# Don't cache uris containing the following segments
if ($request_uri ~* "/wp-admin/|/xmlrpc.php|wp-.*.php|^/feed/*|/tag/.*/feed/*|index.php|/.*sitemap.*.(xml|xsl)") {
    set $skip_cache 1;
}

# Don't use the cache for logged in users or recent commenters
if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_no_cache|wordpress_logged_in") {
    set $skip_cache 1;
}

Screenshot_49

Sau đó mở file Server Block (Vhost) của bạn và thêm phía trên dòng Location ~.php$

include /etc/nginx/customnginx-cache.conf;

Tiếp theo trong section  ~.php$ thêm vào các cấu hình sau.

fastcgi_cache_bypass $skip_cache;
fastcgi_no_cache $skip_cache;

Screenshot_50 - Cài đặt Nginx FastCGI Cache

Lưu tệp và tải lại Nginx để cấu hình có hiệu lực.

service nginx reload

2.5. Bước 5: Cấu hình tự động xóa bộ nhớ cache với WordPress

Đầu tiên, bạn cần cài đặt và kích hoạt plugin Nginx Cache trên trang web WordPress của bạn. Nếu chưa biết cách cài đặt plugins cho WordPress hãy xem Hướng dẫn cài đặt plugins cho wordpress. Sau khi cài đặt và kích hoạt plugins  truy cập Tools -> Nginx Cache và cấu hình plugins

Screenshot_54 - Cài đặt Nginx FastCGI Cache

  • Cache Zone Path: Đường dẫn tới thư mục lưu cache
  • Purge Cache: Tự động xoá cache khi có thay đổi về nội dung

Bây giờ bạn có thể sửa đổi một trong những bài viết của mình để xem liệu bộ đệm có được tự động xóa hay không.

3. Kết luận

Qua bài viết này HOSTVN đã hướng dẫn các bạn cách cài đặt Nginx FastCGI Cache giúp giảm tải máy chủ và giúp website của bạn load nhanh hơn. Nếu có bất kỳ ý kiến đóng góp nào các bạn có thể dể lại bình luận ở bên dưới.

Ebook Wordpress

Đăng ký nhận Ebooks toàn tập hướng dẫn sử dụng WordPress cơ bản


Góc chia sẻVPS Server

Hướng dẫn cài đặt LAMP trên CentOS 8

2020-6-3 18:41:26

Góc chia sẻVPS ServerWordpress

Hướng dẫn sử dụng WP-CLI quản lý website WordPress

2020-6-10 14:56:08

3 trả lời ATác giả MQuản lý
  1. Mình muốn thêm cache cho một trang khác dùng chung VPS thì phải làm sao bạn ?

    • Cấu hình tương tự đổi keys_zone khác là được bạn nhé.

  2. Nếu không muốn cache trang chủ thì cấu hình loại trừ cache như thế nào vậy bạn. Với muốn loại trừ cache từng phần trên trang chủ thì làm sao vậy bạn.

Trung tâm cá nhân
Giỏ hàng
Phiếu mua hàng
Đăng nhập ngay
Tin nhắn Danh sách tin nhắn
Tìm kiếm
Tối