Tốc độ website là yếu tố sống còn. Ngoài việc tối ưu Nginx hay LiteSpeed, việc cấu hình Squid Caching Proxy làm Web Accelerator là một giải pháp mạnh mẽ để giảm tải cho máy chủ.
Nhiều người chỉ biết đến Squid như một Forward Proxy để ẩn danh. Nhưng hôm nay, chúng ta sẽ khám phá sức mạnh thực sự của nó ở chế độ Reverse Proxy (Trình tăng tốc web).

Tóm tắt các bước chính (TL;DR)
- Cài đặt squid (
sudo apt install squid). - Mở port
80(HTTP) và443(HTTPS) trên Firewall (UFW/Firewalld). - Sao lưu và xóa sạch file
/etc/squid/squid.confmặc định. - Thêm cấu hình
http_port 80 accel vhostvàhttps_port 443 accel ... - Thêm
cache_peer 127.0.0.1 parent 8080 ... originserverđể trỏ về backend. - Thêm ACL bảo mật (
acl our_sites dstdomain...) vàhttp_access deny allở cuối. - Tối ưu cache với
cache_dir rock,cache_mem, vàvisible_hostname. - Cấp quyền
sudo chown -R proxy:proxy /var/spool/squid. - Khởi tạo cache
sudo squid -z. - Khởi động lại Squid và kiểm tra bằng
curl -I(tìmX-Cache: HIT).
Giới thiệu Squid Web Accelerator
Squid Caching Proxy là gì?
Squid là một máy chủ proxy bộ đệm (caching proxy) mã nguồn mở, hiệu suất cao. Nó lưu trữ và phân phát các nội dung web được yêu cầu thường xuyên, như hình ảnh, file CSS và JavaScript.
Cần phân biệt rõ:
- Forward Proxy (Bài trước): Người dùng (Client) chủ động trỏ vào Squid để đi ra Internet. Mục tiêu là ẩn danh và kiểm soát truy cập người dùng.
- Reverse Proxy / Web Accelerator (Bài này): Squid đứng trước máy chủ web, “giả dạng” làm máy chủ. Nó chặn các yêu cầu từ Internet gửi đến. Mục tiêu là bảo vệ và tăng tốc máy chủ web.
Tại sao dùng Squid tăng tốc website?
Khi một người dùng truy cập website của bạn, yêu cầu của họ sẽ đi qua Squid trước.
Nếu Squid có bản sao (cache) của nội dung (ví dụ: logo.png), nó sẽ trả về ngay lập tức. Máy chủ web thật (Apache/Nginx) của bạn thậm chí còn không biết có yêu cầu đó.
Lợi ích chính là:
- Giảm tải cho Web Server: Máy chủ gốc chỉ xử lý các nội dung động (dynamic). Nội dung tĩnh (static) đã có Squid lo, giúp giảm đáng kể CPU và RAM.
- Tăng tốc độ tải trang: Phục vụ nội dung từ cache (đặc biệt là cache RAM) nhanh hơn rất nhiều so với việc gọi đến máy chủ web và đọc file từ đĩa.
Chuẩn bị môi trường VPS
Trước khi bắt đầu, bạn cần đảm bảo có một môi trường đã sẵn sàng.
Yêu cầu hệ thống
- VPS Linux: Một VPS chạy Ubuntu (22.04, 20.04) hoặc CentOS (7, 8+). Ưu tiên VPS có ổ cứng SSD để dùng cache
rock. - Quyền Root/Sudo: Bạn cần quyền quản trị cao nhất để cài đặt và sửa file cấu hình.
- Web Server gốc: Bạn bắt buộc phải có một máy chủ web (Apache, Nginx…) đang chạy.
Để đơn giản, bài viết này giả định mô hình:
- Squid (Web Accelerator): Chạy trên IP Public, lắng nghe cổng 80 và 443.
- Web Server (Gốc): Chạy trên 127.0.0.1 (localhost), lắng nghe cổng 8080.
Bước 1: Cài đặt Squid
Đầu tiên, hãy cài đặt Squid từ kho lưu trữ của hệ điều hành.
Trên Ubuntu 20.04 / 22.04:
sudo apt update
sudo apt install squid -y
sudo systemctl start squid
sudo systemctl enable squid
Trên CentOS 7 / 8+:
sudo yum install squid -y
sudo systemctl start squid
sudo systemctl enable squid
Bước 2: Cấu hình Firewall (UFW/Firewalld)
Vì Squid sẽ đóng vai trò là máy chủ web, chúng ta cần mở cổng 80 (HTTP) và 443 (HTTPS) cho công chúng.
Trên Ubuntu (sử dụng UFW):
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
Trên CentOS (sử dụng Firewalld):
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload
Cấu hình Squid Caching Proxy (HTTP)
Đây là phần quan trọng nhất. Chúng ta sẽ chỉnh sửa file cấu hình chính của Squid.
Luôn luôn sao lưu file gốc trước khi làm bất cứ điều gì:
sudo cp /etc/squid/squid.conf /etc/squid/squid.conf.bak
Bây giờ, mở file cấu hình:
sudo nano /etc/squid/squid.conf
CẢNH BÁO QUAN TRỌNG: Vị trí cấu hình Theo tài liệu chính thức của Squid, các cấu hình Web Accelerator (như
http_port 80 accel,acl,http_access) BẮT BUỘC phải nằm ở trên cùng của filesquid.conf.Nếu bạn đặt chúng bên dưới các quy tắc Forward Proxy mặc định, chúng sẽ bị chặn và thất bại.
Khuyến nghị: Xóa toàn bộ nội dung file mặc định (
Ctrl + Ktrong nano) và chỉ dán các cấu hình sạch bên dưới.
Bước 3: Cấu hình cổng và backend
Dán hai dòng quan trọng nhất này vào file squid.conf sạch:
# Squid lắng nghe ở cổng 80, chế độ 'accel' (tăng tốc)
http_port 80 accel defaultsite=your-domain.com vhost
# Chỉ định máy chủ web gốc (backend)
cache_peer 127.0.0.1 parent 8080 0 no-query originserver name=myBackend
Lưu ý về vhost và no-vhost: Một số hướng dẫn cơ bản dùng cờ no-vhost. Tuy nhiên, chúng ta dùng vhost (mặc định trên Squid 4+) vì nó linh hoạt hơn. Nó cho phép Squid nhận diện tên miền, rất cần thiết khi bạn chạy nhiều site hoặc nhiều subdomain (như www.domain.com và domain.com) trên cùng một máy chủ.
Bước 4: Cấu hình bảo mật ACL (Cực kỳ quan trọng)

CẢNH BÁO: Nếu không có bước này, VPS của bạn sẽ trở thành một “Open Proxy”. Tin tặc có thể lạm dụng nó để tấn công các website khác, khiến IP của bạn bị blacklist.
Thêm các dòng sau ngay bên dưới hai dòng trên:
# Tạo một danh sách (ACL) chỉ chứa tên miền của chúng ta
acl our_sites dstdomain your-domain.com www.your-domain.com
# Chỉ cho phép Squid truy cập backend 'myBackend' nếu tên miền khớp
cache_peer_access myBackend allow our_sites
cache_peer_access myBackend deny all
# Chỉ cho phép các yêu cầu HTTP khớp với tên miền
http_access allow our_sites
# Chặn TẤT CẢ các yêu cầu khác (PHẢI nằm ở cuối cùng)
http_access deny all
Bước 5: Tối ưu hóa bộ nhớ đệm (Cache Tuning)
Giờ là lúc bật tính năng cache.
Lựa chọn 1: cache_dir ufs (Cổ điển)
ufs là định dạng truyền thống. Nó ổn định nhưng tạo ra hàng nghìn file nhỏ. Điều này không hiệu quả trên ổ cứng SSD hiện đại.
# KHÔNG KHUYẾN CÁO CHO SSD
# 1024MB cache, 16 thư mục cấp 1, 256 thư mục cấp 2
cache_dir ufs /var/spool/squid 1024 16 256
Lựa chọn 2: cache_dir rock (Hiện đại – Khuyên dùng cho SSD)
rock là định dạng cache mới hơn, được thiết kế cho SSD. Nó lưu trữ tất cả đối tượng vào một “cơ sở dữ liệu” (database) lớn, loại bỏ hàng triệu file nhỏ và tăng tốc độ đọc/ghi đáng kể.
# KHUYẾN CÁO CHO VPS SSD
# 10240MB (10GB) cache, lưu trong 1 file database
# max-size=128MB: Kích thước file tối đa lưu trong rock
cache_dir rock /var/spool/squid/rock-db 10240 max-size=128000000
Lưu ý: Thư mục /var/spool/squid/rock-db phải tồn tại và thuộc quyền sở hữu của user proxy.
Tối ưu cache RAM và thời gian
Thêm các chỉ thị sau để hoàn thiện:
# Cache trên RAM (Memory Cache)
# Đây KHÔNG PHẢI là tổng cache.
# cache_mem chủ yếu lưu siêu dữ liệu (metadata) và các "hot objects"
# (file nhỏ được truy cập liên tục) để tăng tốc độ truy vấn cache.
cache_mem 256 MB
# Không cache file nào lớn hơn 50MB (thay đổi nếu bạn có file lớn)
maximum_object_size 50 MB
# Quy tắc làm mới cache (refresh_pattern)
refresh_pattern \.(jpg|jpeg|png|gif|ico|css|js)$ 1440 20% 10080 override-expire
Lưu ý override-expire: Tùy chọn này buộc Squid cache, bất chấp header Cache-Control từ server gốc. Điều này giúp tăng tốc tối đa, nhưng có thể khiến nội dung bị cũ (stale) nếu bạn không chủ động xóa cache khi cập nhật web.
Ẩn Hostname (Bảo mật)
Thêm dòng này để tránh lộ tên máy chủ nội bộ (ví dụ: vps-12345) của bạn trong các HTTP header.
# Thay thế hostname nội bộ bằng tên miền của bạn
visible_hostname my-proxy.your-domain.com
Bước 6: Khởi tạo cache và chạy Squid
Chúng ta phải tạo thư mục cache và cấp quyền cho user proxy (trên Ubuntu) hoặc squid (trên CentOS).
Nếu bạn dùng rock (Khuyến nghị):
# Tạo thư mục cho database 'rock'
sudo mkdir -p /var/spool/squid/rock-db
# Cấp quyền (Ubuntu)
sudo chown -R proxy:proxy /var/spool/squid
# (Hoặc CentOS)
# sudo chown -R squid:squid /var/spool/squid
Nếu bạn dùng ufs (Cổ điển): (Thư mục /var/spool/squid thường đã có sẵn)
# Cấp quyền (Ubuntu)
sudo chown -R proxy:proxy /var/spool/squid
# (Hoặc CentOS)
# sudo chown -R squid:squid /var/spool/squid
Sau khi cấp quyền, hãy khởi tạo cấu trúc cache (dùng cho cả ufs và rock):
sudo squid -z
Kiểm tra file cấu hình xem có lỗi cú pháp không (im lặng là thành công):
sudo squid -k parse
Cuối cùng, khởi động lại Squid để áp dụng tất cả thay đổi:
sudo systemctl restart squid
Nâng cao: Cấu hình Squid cho HTTPS (SSL Termination)

Hầu hết các website ngày nay đều chạy HTTPS. Chúng ta cần cấu hình Squid xử lý SSL/TLS. Đây gọi là “SSL Termination”.
Tại sao cần cấu hình HTTPS cho Squid?
Ở mô hình này, Squid (trên cổng 443) sẽ nhận kết nối HTTPS từ người dùng. Nó sẽ giải mã yêu cầu, kiểm tra cache, rồi gửi yêu cầu (dưới dạng HTTP không mã hóa) đến backend 127.0.0.1:8080.
Việc này giúp giảm tải xử lý mã hóa SSL cho máy chủ web gốc.
Cấu hình https_port
Bạn bắt buộc phải có file Certificate và Key (thường lấy từ Let’s Encrypt).
Mở file squid.conf (sudo nano /etc/squid/squid.conf) và thêm dòng sau (ngay dưới dòng http_port 80):
# Squid lắng nghe cổng 443, chế độ accel, và chỉ định file cert/key
https_port 443 accel cert=/etc/letsencrypt/live/your-domain.com/fullchain.pem key=/etc/letsencrypt/live/your-domain.com/privkey.pem defaultsite=your-domain.com vhost
Lưu ý: Hãy thay đường dẫn /etc/letsencrypt/live/... cho đúng với vị trí file certificate của bạn.
Khởi động lại Squid lần nữa:
sudo systemctl restart squid
Kiểm tra và gỡ lỗi
Làm sao để biết cấu hình Squid Caching Proxy của bạn đã thành công?
Kiểm tra trạng thái Cache (HIT/MISS)
Sử dụng curl từ một máy khác để kiểm tra HTTP Headers. Chạy lệnh này 2 lần:
curl -I https://your-domain.com
Lần đầu tiên (Cache MISS): Squid chưa có cache, nó phải lấy từ backend (cổng 8080). Bạn sẽ thấy (nhờ visible_hostname): X-Cache: MISS from my-proxy.your-domain.com
Lần thứ hai (Cache HIT): Squid đã có cache, nó trả về nội dung ngay lập tức. Bạn sẽ thấy: X-Cache: HIT from my-proxy.your-domain.com
Nếu bạn thấy HIT, bạn đã thành công tăng tốc website bằng Squid!
Mẹo: Kiểm tra trước khi “lên sóng” (Live)
Trước khi thay đổi DNS trỏ tên miền về IP của Squid, bạn có thể kiểm tra trên máy cá nhân.
Mở file hosts của bạn:
- Windows:
C:\Windows\System32\drivers\etc\hosts - macOS/Linux:
/etc/hosts
Thêm một dòng, trỏ tên miền của bạn vào IP của VPS chạy Squid:
[IP_VPS_Squid] your-domain.com www.your-domain.com
Lưu file lại (cần quyền admin). Giờ đây, chỉ riêng máy bạn truy cập your-domain.com sẽ đi qua Squid. Sau khi kiểm tra HIT/MISS thành công, bạn có thể xóa dòng này và trỏ DNS thật.
Mẹo nâng cao: Cách xóa cache (Purge Cache)
Khi bạn cập nhật file style.css, bạn muốn xóa cache cũ ngay. Nhờ quy tắc acl purge chúng ta thêm ở Bước 4, bạn có thể làm điều này:
Đăng nhập vào VPS (qua SSH) và chạy lệnh:
sudo squidclient -m PURGE https://your-domain.com/path/to/style.css
Lệnh này gửi yêu cầu PURGE từ localhost (127.0.0.1), được Squid cho phép và xóa đối tượng đó khỏi cache ngay lập tức.
Gỡ lỗi (Troubleshooting)

Nếu website không chạy, hãy kiểm tra log của Squid ngay lập tức.
# Xem log truy cập (access) và log hệ thống (cache)
sudo tail -f /var/log/squid/access.log
sudo tail -f /var/log/squid/cache.log
- Lỗi 503 (Service Unavailable): Squid không kết nối được với backend.
- Kiểm tra: Web server gốc có đang chạy trên cổng
8080không? Cấu hìnhcache_peerđã đúng IP và Port chưa?
- Kiểm tra: Web server gốc có đang chạy trên cổng
- Luôn nhận X-Cache: MISS: Cache không hoạt động.
- Kiểm tra: Quyền ghi thư mục cache (lỗi
chown)? File có lớn hơnmaximum_object_size?
- Kiểm tra: Quyền ghi thư mục cache (lỗi
- Lỗi 403 (Forbidden): Lỗi ACL.
- Kiểm tra: Cấu hình đã nằm trên cùng file
squid.confchưa? Tên miền trongacl our_sitesđã gõ đúng chưa?
- Kiểm tra: Cấu hình đã nằm trên cùng file
Nếu bạn gặp các lỗi phổ biến như “Connection Refused” hoặc “Timeout”, bạn có thể xem thêm bài viết chi tiết của chúng tôi về phân tích & sửa lỗi kết nối Proxy.
- Xem thêm: Tối ưu VPS Ubuntu 24.04 với Checklist 11+ bước quan trọng cần làm ngay sau khi cài đặt • ZingServer
Câu hỏi thường gặp (FAQ)
1. Squid Web Accelerator khác gì Squid Forward Proxy?
- Forward Proxy: Bạn (client) cấu hình trình duyệt/hệ thống để trỏ vào Squid (ví dụ: cổng 3128) nhằm đi ra Internet. Mục tiêu là ẩn danh cho bạn.
- Web Accelerator: Bạn (chủ web) đặt Squid “chắn” trước máy chủ web (cổng 80/443). Người dùng cuối không biết sự tồn tại của Squid. Mục tiêu là tăng tốc cho website.
2. Tôi có cần chạy Squid trên VPS riêng không?
- Không bắt buộc. Bạn có thể chạy Squid trên cùng VPS với máy chủ web (Apache/Nginx), như trong hướng dẫn này (Squid nghe cổng 80, Nginx nghe cổng 8080).
- Nên (nếu có thể): Để đạt hiệu suất cao nhất, việc chạy Squid trên một VPS riêng (dedicated proxy server) sẽ giúp cách ly tài nguyên. Toàn bộ RAM/CPU của VPS đó sẽ chỉ dành cho việc caching, không bị máy chủ web cạnh tranh.
3. Squid có thay thế được cache của Nginx/LiteSpeed không?
- Không hẳn là thay thế, mà là một lớp (layer) khác.
- Squid cực kỳ mạnh về cache đối tượng (object caching) và quản lý cache phức tạp.
- Nginx (FastCGI Cache) / LiteSpeed (LSCache) lại rất mạnh về cache trang (full-page cache) cho nội dung động (dynamic content) như PHP.
- Mô hình tốt nhất: Bạn có thể kết hợp cả hai. Dùng Squid làm lớp ngoài cùng (Reverse Proxy) để cache nội dung tĩnh (ảnh, CSS, JS), sau đó Squid sẽ trỏ về Nginx/LiteSpeed để xử lý cache trang động.
4. Tôi có thể dùng Squid tăng tốc nhiều website trên VPS không?
Có. Đó là lý do chúng ta dùng cờ vhost. Bạn chỉ cần thêm tên miền mới vào ACL acl our_sites và đảm bảo cache_peer trỏ về đúng backend (nếu chúng dùng chung backend). Nếu mỗi web có backend riêng, bạn cần thêm cache_peer và ACL cache_peer_access riêng cho từng site.
5. Dùng ufs hay rock cho cache_dir?
Dùng rock nếu VPS của bạn chạy ổ SSD. rock được thiết kế riêng cho SSD, lưu cache vào một file database duy nhất, nhanh hơn nhiều so vơi ufs (vốn tạo ra hàng triệu file nhỏ).
6. Dùng cache_dir rock cần bao nhiêu dung lượng RAM?
- Bản thân
rock(cache trên đĩa) không chiếm nhiều RAM. - Tuy nhiên, chỉ thị
cache_mem(ví dụ: 256MB) là quan trọng. Nó không lưu toàn bộ cache, mà dùng để lưu siêu dữ liệu (metadata) của cacherockvà các đối tượng “hot” (được truy cập nhiều nhất). - Quy tắc chung: Bạn nên cấp cho
cache_memkhoảng 1-2% tổng dung lượngcache_dir rock. Ví dụ:cache_dir rock ... 10240(10GB) thìcache_mem 256 MBlà hợp lý.
7. Tại sao tôi luôn thấy X-Cache: MISS mà không thấy HIT?
Có 4 lý do phổ biến:
- Sai quyền: Thư mục cache (ví dụ:
/var/spool/squid/rock-db) không thuộc sở hữu của userproxy(hoặcsquid). Chạy lại lệnhchown. - File quá lớn: File bạn đang test lớn hơn
maximum_object_sizeđã định nghĩa. - Quy tắc ACL: Cấu hình
http_accesscủa bạn bị sai, hoặc không nằm trên cùng filesquid.conf. - Backend không cho cache: Máy chủ gốc của bạn gửi header
Cache-Control: no-cachevà bạn không dùngoverride-expiretrongrefresh_pattern.
Kết luận
Bạn vừa hoàn thành cấu hình Squid làm Web Accelerator. Bằng cách sử dụng các chỉ thị hiện đại như rock, vhost và cấu hình ACL chặt chẽ, bạn đã biến Squid thành lá chắn, bộ đệm mạnh mẽ, giúp website tải nhanh hơn và giảm tải đáng kể cho máy chủ gốc.
Việc chạy Squid Caching Proxy hiệu quả, đặc biệt với cache rock, đòi hỏi một VPS có ổ cứng SSD tốc độ cao. Nếu bạn cần nền tảng mạnh mẽ, hãy tham khảo ngay các gói VPS cấu hình cao, tối ưu cho hiệu suất của ZingServer!
Nếu bạn gặp lỗi, hãy để lại bình luận bên dưới.
