Squid 作為經典代理緩存服務器,核心價值在於「緩存」。正確配置內存緩存(cache_mem)、磁盤緩存(cache_dir)、訪問控制(ACL)與啟動參數,能顯著提升命中率、降低帶寬成本。本文以 CentOS 5.3 + 自編譯 Squid 為例,詳解生產級配置全流程。
| 參數 | 默認值 | 建議值 | 說明 |
|---|---|---|---|
cache_mem | 256 MB | 物理內存 1/8 ~ 1/4 | 熱門對象內存緩存(不含索引、元數據),實際佔用約 1.5-2 倍。 |
maximum_object_size_in_memory | 512 KB | 64 KB - 256 KB | 單對象進入內存緩存的最大體積,過大擠佔內存。 |
cache_dir | 無 | 見下文 | 磁盤緩存目錄、大小、層級。 |
maximum_object_size | 4 MB | 128 MB - 512 MB | 單對象進入磁盤緩存的最大體積,大文件不緩存節省空間。 |
cache_swap_low / cache_swap_high | 90% / 95% | 85% / 95% | 磁盤緩存水位,超過 high 強制清理,低於 low 停止清理。 |
# 格式:cache_dir 類型 目錄 大小(MB) L1目錄數 L2目錄數
cache_dir ufs /var/spool/squid 10000 16 256
ufs(傳統)、aufs(異步 IO,推薦)、diskd(獨立進程)、rock(高性能固定槽,Squid 4+)。cache_mem,否則啟動警告 WARNING cache_mem is larger than total disk cache space!。# /etc/squid/squid.conf
# 1. 基礎網絡
http_port 3128 # 代理端口
# http_port 8080 intercept # 透明代理需配合 iptables REDIRECT
# 2. 緩存參數(假設 8GB 內存,500GB 磁盤)
cache_mem 2048 MB
maximum_object_size_in_memory 128 KB
cache_dir aufs /var/spool/squid 100000 16 256
maximum_object_size 256 MB
cache_swap_low 85
cache_swap_high 95
# 3. 訪問控制 (ACL)
acl localnet src 10.0.0.0/8
acl localnet src 172.16.0.0/12
acl localnet src 192.168.0.0/16
acl SSL_ports port 443
acl Safe_ports port 80 21 443 70 210 280 488 591 777
acl CONNECT method CONNECT
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost manager
http_access deny manager
http_access allow localnet
http_access allow localhost
http_access deny all # 默認拒絕,按需放開
# 4. 管理信息
cache_mgr admin@example.com
visible_hostname proxy.example.com
# 5. 日志
access_log /var/log/squid/access.log squid
cache_log /var/log/squid/cache.log
# store_log none # 關閉 store.log 節省 IO
# 6. 性能優化
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
refresh_pattern . 0 20% 4320
# 7. DNS
dns_nameservers 223.5.5.5 114.114.114.114
# 8. 內存池優化
memory_pools on
memory_pools_limit 100 MB
# 首次安裝或修改 cache_dir 後必須執行
squid -z
# 輸出:Creating Swap Directories ... done
squid -NCd1
# -N: 不守護進程(前台運行)
# -C: 忽略缺少的 cache_dir(調試用)
# -d1: 調試等級 1(輸出關鍵啟動信息到 stderr)
觀察輸出直到出現 Ready to serve requests. 表示啟動成功。按 Ctrl+C 停止。
# Systemd
systemctl start squid
systemctl enable squid
# SysVinit
service squid start
chkconfig squid on
tail -f /var/log/squid/access.log,出現 TCP_HIT/TCP_MEM_HIT 表示命中。curl -x https://proxy:3128 https://httpbin.org/get -I
# 首次:X-Cache: MISS
# 二次:X-Cache: HIT
squidclient -h localhost -p 3128 mgr:info 查看命中率、內存/磁盤使用量。| 問題 | 原因 | 解決 |
|---|---|---|
啟動報 FATAL: Could not determine fully qualified hostname | 缺少 visible_hostname | 設置 visible_hostname proxy.example.com |
報 WARNING cache_mem is larger than total disk cache space! | cache_dir 大小 < cache_mem | 增大 cache_dir 大小或減小 cache_mem |
客戶端報 The requested URL could not be retrieved | http_access deny all 生效 | 添加 http_access allow localnet 或具體 IP ACL |
| 透明代理不生效 | 缺少 iptables REDIRECT 規則 | iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128 |
| 磁盤 IO 過高 | store_log 開啟、maximum_object_size 過大 | store_log none、調小 maximum_object_size |
cache_peer、never_direct 構建 CDN 邊緣節點。ssl_bump 解密 HTTPS 緩存(需處理憑證信任、隱私合規)。cache_dir rock(高併發)、cache_dir diskd(隔離 IO)、第三方 libsquidaio。squidclient mgr:info + Prometheus Exporter + Grafana 看板。Squid 緩存配置的核心在於「內存緩存熱數據、磁盤緩存溫數據、ACL 精準放行、日志精簡 IO」。按本文參數模板調整、squid -z 初始化、squid -NCd1 前台調試、驗證 TCP_HIT,即可構建高可用高性能代理緩存節點。
Linux 檔案系統核心知識:Ext2、Ext3 與 Swap 深度解析
Linux VNC 服務端配置全流程:systemd 多用戶會話、桌面環境適配、SSH 隧道加固與故障排查
Linux 磁盤配額實戰:從分區掛載到用戶限額的完整配置流程
Ubuntu/Linux 清理舊版 Kernel 完整指令教學:釋放 /boot 空間
Linux 上網配置經典兩式:共享 Windows 主機上網與 ADSL 直撥完整參數
vsftpd 虛擬用戶完整部署指南:PAM 驗證、獨立家目錄與差異化權限控制
Linux 文件檢視與管理核心命令大全:cat、less、head、tail、touch、umask、chattr、find 實戰