Nội dung
Thiết lập Nginx FastCGI Cache trên NGINX giảm thời gian phản hồi máy chủ cho website WordPress của bạn.
I. Tổng quan
Nginx FastCGI Cache là gì?
Trước khi đi vào thực hiện cài đặt hãy cùng mình tìm hiểu qua về Nginx FastCGI Cache nhé. Nếu bạn đang sử dụng LEMP thì chắc bạn sẽ biết bằng Nginx xử lý các file tĩnh rất tốt, và Nginx sẽ không xử lý được các yêu cầu mã PHP, do đó nginx được định cấu hình để chuyển các yêu cầu PHP đến PHP-FPM. Và mình sẽ mô tả cách hoạt động, mô hình của LEMP để bạn nắm nhé.
- Khi client (người dùng) truy cập vào website, trình duyệt sẽ gửi một yêu cầu (request) HTTP đến Nginx, và khi đó nó sẽ tìm nạp trang từ hệ thống tệp.
- Nếu Nginx tìm thấy mã PHP trong trang nó sẽ chuyển yêu cầu tới PHP-FPM để xử lý các mã PHP này. Và nếu cần thì PHP-FPM sẽ truy vấp cơ sở dữ liệu MySQL/MariaDB để tìm kiếm và lấy những gì mà PHP-FPM cần.
- Sau đó PHP-FPM sẽ tạo ra một trang tĩnh là HTML và trả ngược lại cho Nginx và cuối cùng Nginx phản hồi (response) gửi trang HTML tĩnh đến cho trình duyệt web trả về kết quả ở client
Khi lựa chọn máy chủ webserver để xây dựng website mình luôn ưu tiên Nginx, vì Nginx nó rất nhanh khi cung cấp các trang tĩnh HTML. Và thay vì chuyển các yêu cầu trang động PHP đến PHP-FPM để xử lý tạo ra trang HTML mọi lúc, thì khi đó Nginx có thể lưu vào bộ nhớ cache trang HTML đã tạo để lần sau nó có thể gửi các trang đã lưu trong bộ nhớ cache tới trình duyệt web, loại bỏ các yêu cầu PHP và cở sở dữ liệu.
- Điều này có thể cải thiện đáng kể thời gian phản hồi máy chủ và giảm tải trên PHP-FPM và máy chủ cở sở dữ liệu.
- Nó cũng cho phép Nginx phân phát các trang web từ bộ nhớ cache khi máy chủ cơ sở dữ liệu hoặc PHP-FPM gặp sự cố (ảnh đính kèm)
- FastCGI là giao thức giữa Nginx và PHP-FPM nên cache được gọi là FasstCGI Cache.
Để không mất thời gian của các bạn hãy cùng mình đi vào các bước thực hiện nhé. Trong các bước mình sẽ hướng dẫn chi tiết kèm theo các mô tả đính kèm.
II. Các bước cấu hình
Để cấu hình Nginx FastCGI Cache trên NGINX bạn thực hiện tuần tự theo các bước sau. Vì các thao tác chỉnh sửa file cấu hình và nếu bạn là người mới mình sẽ thêm một lệnh cp
(copy) sao chép ra một bản mới để phòng một trường hợp cấu hình sai hoặc xoá nhầm có thể phục hồi lại được.
Bước 1: Chỉnh sửa file cấu hình NGINX
Đầu tiên bạn hãy mở file cấu hình nginx.conf
và thêm các dòng sau vào bên trong block http {
như sau.
cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak vi /etc/nginx/nginx.conf
fastcgi_cache_bypass $skip_cache; fastcgi_no_cache $skip_cache; fastcgi_cache FASTCGICACHE; fastcgi_cache_valid 60m; add_header X-FastCGI-Cache $upstream_cache_status;
Trong đó:
- fastcgi_cache_bypass $skip_cache: Xác định các điều kiện mà theo đó phản hồi sẽ không được lấy từ bộ nhớ cache. Trong khi fastcgi_no_cache $skip_cache xác định các điều kiện mà theo đó phản hồi sẽ không được lưu vào bộ nhớ cache.
- fastcgi_cache FASTCGICACHE:
- fastcgi_cache_valid 60m: Thiết lập thời gian tuỳ thuộc vào bộ nhớ cache mã trang thái HTTP. Trong bài viết này thì các phẩn hồi sẽ được lưu vào bộ nhớ đệm trong 60 phút (Bạn có thể tuỳ chọn theo ngày hoặc giờ ví dụ là 24h, 7d)
- add_header X-FastCGI-Cache $upstream_cache_status: Dòng này được sử dụng để xác nhận xem các yêu cầu đã được phục vụ từ bộ nhớ cache FastCGI hay là chưa.
Bước 2: Định cấu hình NGINX để kích hoạt FastCGI Cache
Bạn hãy mở file cấu hình vhost của domain để định cấu hình cache. Trước tiên bạn cần xác định được file vhost domain của bạn nằm ở đâu trước đã. Bạn có thể tìm kiếm nhanh bằng cách mở file nginx.conf
kiểm tra. Thông thường thì các file sẽ được include tại đây include /etc/nginx/conf.d/*.conf;
.
Lưu ý: Thay my_domain.conf
bằng tên miền của bạn
Sau khi đã xác định được bạn hãy mở file cấu hình vhost domain và thêm các dòng sau.
cp /etc/nginx/conf.d/my_domain.conf /etc/nginx/conf.d/my_domain.conf.bak vi /etc/nginx/conf.d/my_domain.conf
Bạn hãy copy 4 dòng bên dưới và thêm ở trên block server {
như ảnh minh hoạ bên dưới.
fastcgi_cache_path /var/run/nginx-fastcgi-cache levels=1:2 keys_zone=FASTCGICACHE:100m inactive=60m; fastcgi_cache_key "$scheme$request_method$host$request_uri"; fastcgi_cache_use_stale error timeout invalid_header http_500; fastcgi_ignore_headers Cache-Control Expires Set-Cookie;
Trong đó
- fastcgi_cache_path: Dòng này tạo bộ nhớ caceh FastCGI được lưu trong đường dẫn
/var/run/nginx-fsatcgi-cache
.- levels: sẽ xác định phân cấp của bộ nhớ cache
- keys_zone (name:size): Cho phép tạo vùng bộ nhớ chia sẻ nơi lưu trữ tất cả các khóa hoạt động và thông tin về dữ liệu (meta). Lưu ý rằng việc lưu trữ các khóa trong bộ nhớ sẽ tăng tốc quá trình kiểm tra, bằng cách giúp NGINX dễ dàng xác định xem MISS hay HIT của nó mà không cần kiểm tra trạng thái trên disk.
- fastcgi_cache_key: Xác định khoá để tra cứu bộ nhớ cache. Nginx sẽ áp dụng hàm MD5sum trên khoá bộ nhớ cache và sử dụng kết quả hash làm tên của tệp bộ nhớ cache.
- fastcgi_cache_use_stale: Làm cho bộ nhớ cache Nginx trở nên mạnh mẽ hơn. Điều này yêu cầu Nginx tiếp tục cung cấp các bản đã lưu trong bộ nhớ cache cũ cuả một trang ngay cả khi PHP gặp sự cố.
- fastcgi_ignore_headers: Vô hiệu hoá việc xử lý các trường tiêu đề phản hồi nhất định từ máy chủ FastCGI (bạn có thể tìm hiểu thêm ở trang này.)
Bước 3: Cấu hình nội dung không lưu vào bộ nhớ Cache
Các phiên đăng nhập, cookie người dùng, các yêu cầu POST, chuỗi truy vấn, WordPress back-end, sơ đồ trang web (sitemap), feeds và tác giả nhận xét không nên lưu vào bộ nhớ đệm. Và để tắt bộ nhớ đệm cho các mục trên, hãy chỉnh sửa tệp cấu hình nginx tại file nginx.conf
. Tại đây bạn hãy thêm các dòng sau bên dưới block location ~ .php$
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/|index.php|sitemap(_index)?.xml") { 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; }
Ảnh minh hoạ thực tế
Sau khi đã thêm vào file cấu hình vhost hoàn tất. Bạn hãy di chuyển sang bước tiếp theo để hoàn thành.
Bước 4: Khởi động lại dịch vụ NGINX
Trước khi khởi động lại dịch vụ bạn hãy test file cấu hình nginx bằng cách sử dụng cú pháp nginx -t
để kiểm tra. Nếu kết quả trả về nginx: configuration file /etc/nginx/nginx.conf test is successful
thì bạn hãy khởi động lại dịch vụ.
nginx -t service nginx restart
Bước 5: Cài đặt Plugin và kiểm tra Cache
Cài đặt Plugin Cache
Bước cuối cùng bạn cần làm là cài đặt plugin NGINX Cache của WordPress để tự động xóa bộ nhớ cache FastCGI bất cứ khi nào nội dung trang web WordPress của bạn thay đổi. Có nhiều plugin để bạn lựa chọn, nhưng trong bài này mình sẽ sử dụng một plugin của Till Krüss, và plugin đó có tên là NGINX Cache.
- Xem thêm: Hướng dẫn cài đặt Plugin trên WordPress
Sau khi cài đặt hoàn tất, bạn thực hiện kích hoạt Plugin lên để sử dụng.
Tiếp theo bạn truy cập vào Tools => Nginx Cache. Ở phần Cache Zone Path bạn hãy nhập vào đường dẫn lưu cache mà đã tạo ở Bước 2 trong dòng fastcgi_cache_path /var/run/nginx-fastcgi-cache
. Sau khi nhập xong bạn thực hiện click Save Changes để áp dụng thay đổi.
Kiểm tra FastCGI Cache
Tại cửa sổ Terminal bạn nhập vào lệnh curl -I https://my-domain
để kiểm tra trực tiếp. Nếu xuất hiện dòng X-FastCGI-Cache: HIT
có nghĩa đã cache thành công. Và nếu xuất hiện X-FastCGI-Cache: MISS
có nghĩa trang đó chưa được cache lại.
Ngoài ra bạn có thể kiểm tra từ trình duyệt bằng cache kiểm tra Headers. Bận nhấm phím F12
sau đó di chuyển sang Tab Network và reload lại wesbite. Sau đó kiểm tra phần Response Headers nếu hiện X-FastCGI-Cache: HIT
thì đã cache hoàn tất.
Bảng so sánh trước và sau khi cache
Mình sử dụng ApacheBench để kiểm tra trước và sau khi cache.
ab -n 100 -c 10 https://lab5.dotrungquan.info/
Lệnh này có nghĩa là 100 kết nối từ 10 người dùng khác nhau. Và ảnh bên dưới là kết quả benchmark của mình. Bạn hãy xem các thông số từ dưới dòng Document Length và các thông số quan trọng là Requests per second:
Time per request:Time per request:
trước và sau khi cache khác biệt rất rõ rệt.
III. Tổng kết
Như vậy mình đã hướng dẫn hoàn tất các bước thiết lập Nginx FastCGI Cache trên NGINX giảm thời gian phản hồi máy chủ. Chúc các bạn có thể thực hiện thành công. Xem thêm các bài viết hữu ích về VPS Linux tại đường dẫn sau:
Nếu các bạn cần hỗ trợ các bạn có thể liên hệ bộ phận hỗ trợ theo các cách bên dưới:
- Hotline 247: 028 888 24768 (Ext 0)
- Ticket/Email: Bạn dùng email đăng ký dịch vụ gửi trực tiếp về: support@azdigi.com.