Varnish (tên đầy đủ là Varnish Cache) là một phần mềm HTTP reverse proxycache HTTP accelerator – nghĩa là nó được đặt phía trước máy chủ web (như Apache, Nginx) để lưu trữ tạm (cache) các nội dung web, giúp giảm tải và tăng tốc độ phục vụ người dùng.


✅ Nói ngắn gọn:

Varnish là một lớp trung gian tăng tốc website bằng cách cache dữ liệu động thành tĩnh.


📦 Varnish hoạt động như thế nào?

  1. Trình duyệt người dùng → gửi yêu cầu → Varnish
  2. Varnish kiểm tra xem yêu cầu đó đã được cache chưa:
    • → trả dữ liệu ngay lập tức (cực nhanh)
    • Chưa có → chuyển tiếp đến Web Server (Apache/Nginx) để lấy nội dung, đồng thời lưu lại vào cache

🎯 Lợi ích chính của Varnish:

Tính năngMô tả
🚀 Tăng tốc độ tải trangGiảm thời gian phản hồi bằng cách trả dữ liệu cache
🧠 Giảm tải server gốcÍt request phải đi đến web server thật
⚙️ Tùy biến mạnhSử dụng VCL (Varnish Configuration Language) để cấu hình logic cache
📊 Quản lý cache dễCó thể xóa, kiểm soát từng phần cache theo URL, Cookie, Header...

💡 Varnish dùng cho ai?

  • Website truy cập lớn (báo điện tử, thương mại điện tử...)
  • Website chạy nội dung động, nhưng có phần hiển thị không thay đổi thường xuyên (ví dụ: trang bài viết)

❌ Nhược điểm:

  • Không hỗ trợ HTTPS trực tiếp → cần kết hợp thêm Nginx/Apache làm SSL termination.
  • Cần cấu hình kỹ (đặc biệt nếu nội dung thay đổi theo Cookie, Session)

🔧 Ví dụ cách dùng Varnish:

  1. Bạn có một website WordPress
  2. Bạn cài Varnish làm proxy
  3. Khi người dùng truy cập trang chủ, Varnish lưu nội dung HTML
  4. Lần sau người khác truy cập, Varnish trả lại nội dung cache ngay mà không hỏi WordPress nữa

Dưới đây là hướng dẫn cài đặt và cấu hình Varnish hoạt động với Nginx (giả sử bạn đang dùng Linux Ubuntu/Debian hoặc tương đương):


⚙️ Mô hình kiến trúc:

Client ⇄ Varnish (port 80) ⇄ Nginx (port 8080) ⇄ PHP/MySQL

🔧 Bước 1: Cài đặt Varnish

sudo apt update
sudo apt install varnish

🛠️ Bước 2: Cấu hình Nginx chạy ở port 8080 (thay vì mặc định là 80)

Sửa file cấu hình server block của Nginx:

sudo nano /etc/nginx/sites-available/default

Đổi:

listen 80;

➡️ Thành:

listen 8080;

Sau đó reload Nginx:

sudo systemctl reload nginx

🛠️ Bước 3: Cấu hình Varnish để listen ở port 80 và proxy về Nginx 8080

Sửa file khởi động Varnish (tuỳ bản phân phối):

Ubuntu/Debian (>= 18.04):

sudo nano /etc/systemd/system/multi-user.target.wants/varnish.service

Tìm dòng:

ExecStart=/usr/sbin/varnishd ...

➡️ Đổi thành ví dụ sau:

ExecStart=/usr/sbin/varnishd -a :80 -T localhost:6082 -b localhost:8080 -s malloc,512m
  • -a :80: Varnish lắng nghe ở port 80
  • -b localhost:8080: Backend là Nginx ở cổng 8080
  • -s malloc,512m: Dùng RAM để cache với 512MB

📝 Bước 4: Reload lại Varnish

sudo systemctl daemon-reexec
sudo systemctl restart varnish

✅ Bước 5: Kiểm tra hoạt động

  • Truy cập trang web ở http://yourdomain.com
  • Kiểm tra header phản hồi:
curl -I http://yourdomain.com

Bạn sẽ thấy một vài header như:

X-Varnish: 12345
Via: 1.1 varnish (Varnish/7.0)

📌 Nếu có X-Varnish, nghĩa là request đã qua proxy Varnish.


🚫 Tuỳ chọn: Tắt Varnish (quay lại dùng Nginx trực tiếp)

Nếu bạn muốn dùng lại Nginx ở port 80:

sudo systemctl stop varnish
sudo nano /etc/nginx/sites-available/default
# đổi lại listen 80
sudo systemctl restart nginx

🔍 Debug Cache Hit/Miss

Để xem request có được cache hay không:

curl -I http://yourdomain.com

Xem header:

HeaderÝ nghĩa
X-Cache: HITTrang được lấy từ cache
X-Cache: MISSTrang lấy từ Nginx (và có thể sẽ được cache cho lần sau)