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

Mục lục

Nginx là một trong những máy chủ web phổ biến nhất trên thế giới với khả năng phục vụ website với lưu lượng truy cập lớn, tiết kiệm tài nguyên hệ thống cùng những tính năng tuyệt vời như Reverse Proxy, Load Balancing.

Việc thêm cache cho Nginx là cách đơn giản để cải thiện hoạt động, khả dụng và tính sẵn sàng của ứng dụng web, đặc biệt là WordPress.

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

Cơ chế Nginx FastCGI Cache

Trường hợp không có cache, ứng dụng web phản hồi trực tiếp cho user

Khi tích hợp cache vào Nginx, mọi request đều đi qua nó

Một ví dụ về HTTP request trong hình dưới

Dựa vào đó, Nginx tạo một hash key

Nginx kiểm tra hash key này có tồn tại trong bộ nhớ. Nếu không, nó cho request đi thẳng vào ứng dụng

Ứng dụng trả lời và phản hồi sẽ được lưu trong thư mục hệ thống

Chỉ duy nhất hash key tạo trước đó được thêm vào bộ nhớ

Sau cùng user nhận được phản hồi

Khi user request vào ứng dụng đó lần hai, Nginx lại tạo một hash key và kiểm tra sự tồn tại của nó trên bộ nhớ. Nginx sẽ phục vụ file được cache trong thư mục hệ thống có liên quan đến hash key

Cấu hình Nginx FastCGI Cache

1. Chỉnh sửa tập tin cấu hình chính 

Trong tập tin /etc/nginx/nginx.conf, thêm 2 dòng sau vào http block:

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";


Lệnh fastcgi_cache_path tạo đường dẫn bộ đệm (chỉ khả dụng trong http block)

  • Đối số đầu tiên chỉ định vị trí lưu cache (/etc/nginx/cache)
  • Tham số levels thiết lập hệ thống phân cấp dưới thư mục cache, các tệp đều đặt chung một thư mục nếu tham số này không được cấu hình

  • Đối số thứ 3 đặt tên cho cache zone là phpcache có dung lượng là 100m
  • max_size: kích thước tối đa của toàn bộ cache là 10GB, nếu không được chỉ định sẽ sử dụng tất cả dung lượng đĩa còn lại
  • inactive: dữ liệu không hoạt động (60 phút) sẽ bị xóa khỏi bộ đệm
  • use_temp_path: bắt buộc Nginx ghi trực tiếp vào thư mục đệm, không sao chép dữ liệu qua vùng lưu trữ tạm thời

Lệnh fastcgi_cache_key định dạng key (khóa) của cache file để tra cứu bộ đệm

KEY: httpGETwww.tamtt.ml/info.php
  • $scheme: http
  • $request_method: GET
  • $host: www.tamtt.ml
  • $request_uri: /info.php

Bạn có thể thay đổi định dạng key này theo ý mình

Tiến hành tạo và phân quyền thư mục cache

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

2. Chỉnh sửa Server Block (vhost)

Mở tập tin cấu hình vhost, thường nằm tại vị trí /etc/nginx/conf.d/your-domain.conf

Cuộn xuống vị trí ~.php$ thêm các dòng

fastcgi_cache phpcache;
fastcgi_cache_valid 200 301 302 60m;
fastcgi_cache_revalidate on;
fastcgi_cache_methods GET HEAD;
fastcgi_cache_use_stale error timeout updating invalid_header http_500 http_503;
fastcgi_cache_min_uses 3;
fastcgi_cache_background_update on;
fastcgi_cache_lock on;
add_header X-FastCGI-Cache $upstream_cache_status;


Các tham số fastcgi_cache mang nghĩa:

  • Lệnh đầu kích hoạt vùng nhớ tạo trước đó trên lệnh path
  • valid: đặt thời gian bộ đệm tùy mã trạng thái HTTP (vd: 200, 301, 302 trong 60 phút)
  • revalidate: Nginx sẽ không tải lại nội dung khi thấy mã code 304, not modified
  • method: áp dụng với các phương thức GET HEAD
  • use_stale: Nginx phục vụ nội dung cũ hết hạn khi response ứng dụng hết thời gian chờ hoặc trả về mã trạng thái 50x
  • min_uses: ra lệnh cho Nginx cache lại response sau khi nó được request theo số lần quy định (3 lần)
  • background_update: phối hợp với lệnh use_stale để cập nhật nội dung mới khi ứng dụng sẵn sàng
  • lock: cho phép mỗi request đầu tiên đi tới ứng dụng gốc
  • X-FastCGI-Cache: thể hiện header trạng thái của cache

Về phần $upstream_cache_status, bạn tham khảo các trạng thái ở link sau

Kiểm tra cấu hình và tải lại Nginx

nginx -t && systemctl reload nginx

3. Kiểm tra FastCGI Cache

Dùng công cụ curl để lấy tiêu đề phản hồi HTTP

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


Tiêu đề X-FastCGI-Cache hiện HIT cho biết phản hồi đã được phục vụ từ bộ đệm, còn MISS là chưa cache

4. Cấu hình loại trừ Cache

Các mục không nên lưu trữ trong bộ đệm:

  • Phiên đăng nhập
  • Cookie
  • POST request
  • Query
  • Back-end WordPress
  • Feed 

Tạo file /etc/nginx/custom/nginx-cache.conf tắt bộ đệm ẩn cho các mục đó, dán nội dung sau vào:

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;
}


Sau đó mở file server block (Vhost) rồi thêm phía trên dòng Location ~.php$

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

Thêm tiếp vào section ~.php$ cấu hình sau:

fastcgi_cache_bypass $skip_cache;
fastcgi_no_cache $skip_cache;


Lưu và tải lại Nginx

Tự động xóa bộ nhớ Cache trong WordPress

Cài plugins Nginx Cache, truy cập Tools -> Nginx Cache và kích hoạt nó lên

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

Bạn kiểm tra bằng việc xóa một trong những bài viết của mình để xem bộ đệm có tự động xóa theo hay không.

Chúc bạn thành công!

 

 

 

 

 

 

Để lại một bình luận 0

Your email address will not be published. Required fields are marked *