IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

Squid的Linux下安装配置笔记(下)

本机暂存

上一篇主要讲述了squid在linux下的安装以及安装和运行的时候遇到的一些问题,这篇文章主要就是讲squid的配置啦。
废话不多说,下面是我完整的squid透明代理(反向代理)配置文件示例啦。里面有详细的解释。

squid的配置文件保存在/opt/squid/etc/squid.conf文件中。

#可见主机名,就是给squid服务器个名分,要不然它会闹事的~
visible_hostname squid.sourcejoy.com
#服务器管理员邮箱,这个很酷,SQUID报错页面就会显示这个邮箱,嘿嘿~
cache_mgr yuhai@mail.gasoft
#指定squid监听端口,可以指定监听多个端口
#第一行的80 后面多出个vhost,这个东西是为了让squid作为透明代理的,有了它,SQUID就能挡在web server前面了。

http_port 80 vhost
http_port 3128


#SQUID可以使用的最大内存值,一般设为系统内存的1/3,最好不要超过2G,超过了会不稳定
cache_mem 2048 MB


#可以缓存的最大文件的大小,一般做优化需要用到
maximum_object_size 10000 KB
#可以在内存中缓存的最大文件的大小,一般做优化需要用到
maximum_object_size_in_memory 2048 KB
#缓存目录设置,是SQUID最重要的参数之一,它告诉squid以何种方式存储cache文件到磁盘的什么位置
#参数 ufs 为存储方式 后面是存储路径,接下来是此目录下存储的文件总大小上限(单位为M)
#16表示此目录的下级子目录数量,256指再下级子目录数量

cache_dir ufs /opt/squid/var/cache 50000 16 256

#SQUID的访问日志内容保存格式是否模拟apache格式
emulate_httpd_log off
#定义日志格式
#语法为:logformat 格式名称 格式内容

logformat combined %>a %ui %un [%tl] "%rm %ru HTTP/%rv" %>Hs %<st "%{Referer}>h" "%{User-Agent}>h" %Ss:%Sh
#定义access请求日志路径 和使用的语法格式
access_log /opt/squid/var/logs/access.log combined
#store日志,和access_log用法一样,这里选择了不记录
cache_store_log none


#接下来就是一堆ACL配置
#ACL语法:acl  列表名称  acl类型  控制目标
#acl类型可选值:
# src : 源地址 (即客户机IP地址) dst : 目标地址 (即服务器IP地址)srcdomain : 源名称 (即客户机名称)dstdomain : 目标名称 (即服务器名称)
# time : 一天中的时刻和一周内的一天  url_regex : URL 规则表达式匹配    urlpath_regex: URL-path 规则表达式匹配,略去协议和主机名
# proxy_auth : 通过外部程序进行用户验证 maxconn : 单一 IP 的最大连接数



#下面定义了一个要操作的域名列表
#把下面这些域名指向当前SQUID服务器,则SQUID则根据后续规则进行处理
acl squid_api dstdomain api.sourcejoy.com
acl squid_web dstdomain web.sourcejoy.com info.sourcejoy.com kk.sina.com.cn
acl squid_test dstdomain test.sourcejoy.com
#squid self filter
acl squid_sj dstdomain squid.sourcejoy.com


#cache_peer 段
#语法:cache_peer hostname type http_port icp_port options
#type:指明hostname的类型,是同级子代理服务器还是父代理服务器,也即parent(父) 还是 sibling(子);
#父邻居能为子cache转发丢失的Cache,而子邻居不可能
#http_port指hostname的监听端口,icp_port指hostname上的ICP监听端口,对于不支持ICP协议的可指定0
#options:可以包含一个或多个关键字
#no-query:不向该peer发送ICP请求
#login=user:password:当你的父代理服务器要求用户认证时可以使用该选项来进行认证。
#originserver 表示此parent作为源服务器连接。当此服务器是web服务器时,SQUID用于缓存加速服务器。
cache_peer 192.168.0.201 parent 80 0 no-query originserver
# squid自身的HTTP访问
cache_peer 192.168.1.200 parent 9528 0 no-query originserver
cache_peer_access 192.168.0.200 deny !squid_sj
cache_peer_access 192.168.0.201 deny !squid_api
cache_peer_access 192.168.0.202 deny !squid_web !squid_test


#不缓存某些规则的url
acl integrity url_regex -i .+/integrity/.+\.htm(l)?$
cache deny integrity
acl no_cache_file urlpath_regex \.(xml|jpg|gif|png|bmp|js|css|swf|wsdl)$
cache deny no_cache_file


#设置同一IP最大连接数
acl OverConnLimit maxconn 200
http_access deny OverConnLimit


#缓存过期规则匹配
#只对后端没设置Expires过期时间的页面起作用而对类似apache mod_expires 设置过的页面不起作用
#语法:refresh_pattern [-i] regexp min percent max [options]
#概念:LM就是页面Header里时间(Date)和Last-Modified时间的差。Date一般是Squid从后面取页面的时间,Last-Modified 一般是页面生成时间
#min, max的单位是分钟
#如果LM<min 使用缓存,如果LM<(min + (max - min)*percent) 使用缓存
#加上ignore-reload选项,忽略请求里的no-cache指令,直到被主动purge掉为止
# article page
refresh_pattern -i .+/article/.+\.htm(l)?$ 43200 100% 1440 ignore-reload
# channel list page
refresh_pattern -i .+/(channel|list)/.+\.htm(l)?$ 120 100% 120 ignore-reload
# index page old 60
refresh_pattern -i www\.sourcejoy\.com/(index\.html)?$ 1440 100% 1440 ignore-reload


以上配置全部讲解完啦。大家把以上详细配置示例整理修改一下,就可以作为自己的反响代理缓存服务器啦。

同分类推荐文章

  1. Vibe新开源项目 - Vaala AI Gateway (2026-05-17 02:10:19)
  2. SmartPerfetto 架构文章 Q&amp;A:8 个深度技术问答 (2026-04-10 11:00:00)
  3. 让 AI 把我的 PHP 博客重写成 Go (2026-03-27 18:33:54)

查看更多 后端 文章 →

建议继续学习

  1. 解析nginx负载均衡 (累计阅读 16,517)
  2. Linux如何统计进程的CPU利用率 (累计阅读 16,211)
  3. 我的 RHCA 之路 (累计阅读 13,930)
  4. Linux内存点滴 用户进程内存空间 (累计阅读 13,059)
  5. 给程序员新手的一些建议 (累计阅读 13,026)
  6. Linux 性能监控、测试、优化工具 (累计阅读 12,955)
  7. 关于linux内存free的一些事情 (累计阅读 12,756)
  8. ps - 按进程消耗内存多少排序 (累计阅读 12,610)
  9. Google怎么用linux (累计阅读 12,473)
  10. find命令的一点注意事项 (累计阅读 11,787)