Site icon ZingServer

Cấu hình Squid Caching Proxy làm Web Accelerator (Hướng dẫn tăng tốc website)

Cấu hình Squid Caching Proxy làm Web Accelerator (Hướng dẫn tăng tốc website)

Cấu hình Squid Caching Proxy làm Web Accelerator (Hướng dẫn tăng tốc website)

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)

  1. Cài đặt squid (sudo apt install squid).
  2. Mở port 80 (HTTP) và 443 (HTTPS) trên Firewall (UFW/Firewalld).
  3. Sao lưu và xóa sạch file /etc/squid/squid.conf mặc định.
  4. Thêm cấu hình http_port 80 accel vhosthttps_port 443 accel ...
  5. Thêm cache_peer 127.0.0.1 parent 8080 ... originserver để trỏ về backend.
  6. Thêm ACL bảo mật (acl our_sites dstdomain...) và http_access deny all ở cuối.
  7. Tối ưu cache với cache_dir rock, cache_mem, và visible_hostname.
  8. Cấp quyền sudo chown -R proxy:proxy /var/spool/squid.
  9. Khởi tạo cache sudo squid -z.
  10. Khởi động lại Squid và kiểm tra bằng curl -I (tìm X-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õ:

  1. 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.
  2. 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à:

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

  1. 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.
  2. 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.
  3. 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:

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 file squid.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 + K trong 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ề vhostno-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.comdomain.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ả ufsrock):

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:

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

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.

Câu hỏi thường gặp (FAQ)

1. Squid Web Accelerator khác gì Squid Forward Proxy?

2. Tôi có cần chạy Squid trên VPS riêng không?

3. Squid có thay thế được cache của Nginx/LiteSpeed khô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?

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:

  1. Sai quyền: Thư mục cache (ví dụ: /var/spool/squid/rock-db) không thuộc sở hữu của user proxy (hoặc squid). Chạy lại lệnh chown.
  2. File quá lớn: File bạn đang test lớn hơn maximum_object_size đã định nghĩa.
  3. Quy tắc ACL: Cấu hình http_access của bạn bị sai, hoặc không nằm trên cùng file squid.conf.
  4. Backend không cho cache: Máy chủ gốc của bạn gửi header Cache-Control: no-cache và bạn không dùng override-expire trong refresh_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.

Tài liệu tham khảo

Exit mobile version