部署 Squid 集群 + Nginx 虚拟主机,实现 Web 页面缓存与完整校验 📅 发布时间:2026/7/5 7:06:30 👁️ 浏览次数: 文章目录部署 Squid 集群 Nginx 虚拟主机实现 Web 页面缓存与完整校验整体架构一、部署后端 Nginx 虚拟主机1. 安装 Nginx2. 配置虚拟主机3. 验证虚拟主机二、部署 Squid 集群双节点兄弟模式1. 安装 Squid2. 基础配置两台配置基本相同除 cache_peer 指向对端3. 防火墙放行端口三、配置 Squid 转发到后端虚拟主机四、完整校验流程1. 验证单节点缓存2. 验证集群共享缓存兄弟命中3. 验证虚拟主机区分4. 验证缓存一致性内容更新后是否获取新版本步骤检查缓存失效是否在集群内传播5. 监控缓存命中率五、完整部署校验清单六、常见问题与调优Q1兄弟节点间 ICP 查询失败Q2缓存命中但返回旧内容缓存未及时更新Q3兄弟节点间无法共享缓存始终 MISS 且回源Q4虚拟主机无法正确路由404 或 502Q5如何开启 PURGE 方法七、总结我们将部署一个完整的缓存加速体系后端是Nginx Web服务器配置多个虚拟主机例如两个不同的网站前端是Squid集群双节点互为兄弟对后端Web虚拟主机的内容进行缓存。所有配置和验证步骤都会详细说明确保集群内缓存共享、虚拟主机正确识别、缓存一致性得到验证。部署 Squid 集群 Nginx 虚拟主机实现 Web 页面缓存与完整校验整体架构后端 Web 服务器一台 Nginx 服务器配置两个虚拟主机site1.example.com和site2.example.com分别提供不同的网页内容。前端 Squid 集群两台 Squid 服务器squid1和squid2组成兄弟集群共同代理后端 Web 内容。客户端通过任意 Squid 节点访问两个虚拟主机期望缓存命中且节点间能共享缓存。客户端 -- Squid集群 (squid1/squid2) -- Nginx虚拟主机 (site1, site2)一、部署后端 Nginx 虚拟主机1. 安装 Nginx在选定的后端服务器上例如 IP 192.168.1.100安装 Nginxsudodnfinstall-y nginx# CentOS/RHEL# 或 apt install -y nginx # Ubuntu/Debian2. 配置虚拟主机创建两个网站的根目录和测试页面。# 创建目录sudomkdir-p /var/www/site1sudomkdir-p /var/www/site2# 创建测试首页echoh1Welcome to Site 1/h1pContent from site1.example.com/p|sudotee/var/www/site1/index.htmlechoh1Welcome to Site 2/h1pContent from site2.example.com/p|sudotee/var/www/site2/index.html编辑 Nginx 配置文件/etc/nginx/nginx.conf或在/etc/nginx/conf.d/下创建两个虚拟主机配置文件。site1.conf:server { listen 80; server_name site1.example.com; root /var/www/site1; index index.html; # 可选添加缓存控制头方便 Squid 缓存 location / { add_header Cache-Control public, max-age3600; try_files $uri $uri/ 404; } }site2.conf:server { listen 80; server_name site2.example.com; root /var/www/site2; index index.html; location / { add_header Cache-Control public, max-age3600; try_files $uri $uri/ 404; } }测试配置并启动 Nginxsudonginx -tsudosystemctlenable--now nginx3. 验证虚拟主机在本地或同一网络内使用curl测试需配置 hosts 或 DNScurl-HHost: site1.example.comhttp://192.168.1.100curl-HHost: site2.example.comhttp://192.168.1.100应分别返回两个站点的内容。二、部署 Squid 集群双节点兄弟模式1. 安装 Squid在两台 Squid 服务器假设 IP 分别为 192.168.1.10 和 192.168.1.11上执行sudodnfinstall-y squid2. 基础配置两台配置基本相同除 cache_peer 指向对端编辑/etc/squid/squid.conf覆盖以下内容# 监听端口http_port3128# 缓存目录100GBcache_dir ufs /var/spool/squid10240016256# 内存缓存cache_mem256MB# 最大缓存对象maximum_object_size1GB maximum_object_size_in_memory128KB# 日志access_log /var/log/squid/access.log squid cache_log /var/log/squid/cache.log# 允许所有客户端生产环境请限制http_access allow all# 关键优化合并并发请求collapsed_forwarding on minimum_expiry_time0# ICP 端口用于兄弟节点间查询icp_port3130# ---------- 集群配置 ----------# 在 squid1 (192.168.1.10) 上添加# cache_peer 192.168.1.11 sibling 3128 3130# 在 squid2 (192.168.1.11) 上添加# cache_peer 192.168.1.10 sibling 3128 3130# 可选启用缓存摘要默认可能开启digest_generation on分别在两台服务器上根据 IP 添加对应的cache_peer行然后重启 Squidsudosquid -z# 初始化缓存目录仅首次sudosystemctlenable--now squid3. 防火墙放行端口sudofirewall-cmd --add-port3128/tcp --add-port3130/udp --permanentsudofirewall-cmd --reload三、配置 Squid 转发到后端虚拟主机由于后端是虚拟主机Squid 必须根据请求的Host头将请求转发到正确的源站Nginx 服务器。这里我们设置 Squid 将所有请求转发给后端的 Nginx 服务器192.168.1.100由 Nginx 根据 Host 头路由到对应虚拟主机。在 Squid 配置中添加# 定义后端源站可以是多个但这里只有一个 Nginx 服务器cache_peer192.168.1.100 parent800no-query originservernamebackend# 对所有请求强制通过上述后端获取避免直接连接互联网never_direct allow all说明parent表示后端是父级源服务器。originserver表示这是一个原始服务器Squid 会向其发送标准的 HTTP 请求。namebackend给这个 peer 起个名字便于日志中识别。现在 Squid 集群会客户端请求先到 Squid。Squid 查询兄弟节点是否有缓存通过 ICP。如果都没有则向backend即 Nginx发起请求。收到响应后缓存并返回给客户端。四、完整校验流程1. 验证单节点缓存通过squid1请求 site1curl-x http://192.168.1.10:3128 -HHost: site1.example.comhttp://192.168.1.100/首次请求查看 squid1 的 access.logsudotail-1 /var/log/squid/access.log应显示TCP_MISS/200HIER_DIRECT/192.168.1.100。再次请求同一个 URL应显示TCP_HIT/200HIER_NONE或HIER_DIRECT/192.168.1.100但状态为 HIT证明本地缓存生效。同样测试 site2。2. 验证集群共享缓存兄弟命中确保 squid1 上已缓存了 site1 的页面通过上述步骤。现在通过squid2请求同一个 URLcurl-x http://192.168.1.11:3128 -HHost: site1.example.comhttp://192.168.1.100/查看 squid2 的 access.logsudotail-1 /var/log/squid/access.log应看到类似1584095320.691 127 192.168.1.10 TCP_HIT/200 1234 GET http://site1.example.com/ - HIER_DIRECT/192.168.1.10 -关键TCP_HIT且HIER_DIRECT/192.168.1.10表明从兄弟节点 squid1 获取了缓存未回源。3. 验证虚拟主机区分Squid 必须根据Host头正确区分两个虚拟主机。测试方法通过 squid1 请求 site1 的页面使其缓存。通过 squid1 请求 site2 的页面应 MISS然后缓存。再次通过 squid1 请求 site1应 HIT请求 site2应 HIT。在 squid2 上分别请求两个站点也应从兄弟命中各自的缓存不会混淆。如果混淆可能是后端 Nginx 配置问题两个虚拟主机返回相同内容或 Squid 缓存键未包含 Host 头Squid 默认缓存键包含 Host除非配置了ignore-host一般不会混淆。4. 验证缓存一致性内容更新后是否获取新版本步骤修改后端 site1 的内容echoh1Updated Site 1/h1|sudotee/var/www/site1/index.html立即通过 squid1 请求 site1curl-x http://192.168.1.10:3128 -HHost: site1.example.comhttp://192.168.1.100/可能仍然返回旧内容因为缓存未过期。强制刷新缓存两种方式通过 Squid 管理命令手动清除squidclient -p3128-m PURGE http://site1.example.com/需要配置 squid 允许 PURGE 方法默认可能未开启可临时开启用于测试或等待缓存过期根据我们设置的max-age3600需要1小时。或重启 Squid 清空缓存测试用生产不推荐。若想快速验证一致性可临时修改后端返回的Cache-Control头为no-cache然后重新请求。验证更新清除缓存后再次请求应返回新内容且 access.log 显示TCP_MISS。再次请求应变为TCP_HIT且内容为新。检查缓存失效是否在集群内传播在 squid1 上执行 PURGE 后squid2 上该对象的缓存是否也失效默认情况下兄弟节点之间不会自动传播 PURGE 请求。如果希望集群内缓存同步需要配置 HTCP 或 ICP 清除或使用外部脚本调用所有节点的 PURGE。测试时可以分别清除两个节点或验证当某个节点缓存失效后另一个节点会因 MISS 而重新从后端获取然后再次缓存从而逐渐一致。5. 监控缓存命中率通过 squidclient 查看统计squidclient -p3128mgr:info|grep-ERequest Hit Ratios|Byte Hit Ratios期望命中率随测试次数增加而上升。五、完整部署校验清单检查项命令/方法预期结果后端虚拟主机正常curl -H Host: site1.example.com http://192.168.1.100返回 site1 内容Squid 服务状态systemctl status squidactive (running)Squid 端口监听ss -tunlp | grep -E 3128|31303128/tcp, 3130/udp单节点本地命中两次请求同一 URL观察 access.log第一次 MISS第二次 HIT集群兄弟命中通过 node2 请求 node1 已缓存的 URLnode2 日志显示TCP_HIT且HIER_DIRECT指向 node1虚拟主机区分分别请求两个站点查看缓存键两个站点的缓存独立不会相互覆盖缓存一致性修改后端内容PURGE 后重新请求返回新内容且 access.log 显示 MISS防火墙规则sudo firewall-cmd --list-all包含 3128/tcp 和 3130/udp配置文件语法squid -k parse无错误六、常见问题与调优Q1兄弟节点间 ICP 查询失败检查防火墙是否开放 UDP 3130。使用tcpdump -i any udp port 3130观察是否有包交换。确认cache_peer行中的 IP 正确且双方都能互通。Q2缓存命中但返回旧内容缓存未及时更新后端返回的Cache-Control可能过长可适当缩短或使用refresh_pattern覆盖refresh_pattern -i \.html$ 60 50% 120表示 html 文件最小缓存 60 分钟最大 120 分钟。需要手动刷新时使用squidclient -m PURGE需配置 ACL 允许本地或管理 IP。Q3兄弟节点间无法共享缓存始终 MISS 且回源检查兄弟节点的cache_peer配置是否正确双方都需配置。确认对方 Squid 运行正常且有缓存内容。尝试使用 ICP 查询squidclient -p 3128 mgr:icp查看 ICP 统计。Q4虚拟主机无法正确路由404 或 502确认 Squid 的cache_peer指向 Nginx IP 和端口80。检查 Nginx 的server_name是否匹配客户端请求的 Host。在 Squid 的 access.log 中查看请求的 URL 和 Host 是否正确。Q5如何开启 PURGE 方法在 squid.conf 中添加acl PURGE method PURGE http_access allow PURGE localhost http_access deny PURGE然后重启即可在本地使用 squidclient 执行 PURGE。七、总结通过上述步骤你成功构建了一个由 Squid 双节点集群和 Nginx 虚拟主机组成的 Web 缓存系统。该系统能够根据 Host 头正确缓存多个虚拟站点的内容。集群内兄弟节点共享缓存减少回源流量。提供完整的校验方法确保缓存命中率和内容一致性。后续可根据业务需求扩展更多 Squid 节点或增加负载均衡器提升可用性。
前端人狂喜:文心4.0一键生成中文技术视频,加特效字幕简直不要太丝滑 前端人狂喜:文心4.0一键生成中文技术视频,加特效字幕简直不要太丝滑前端人狂喜:文心4.0一键生成中文技术视频,加特效字幕简直不要太丝滑别卷代码了,来看看AI怎么帮咱们"摸鱼"出大片这玩意儿到底是个啥&#… 2026/5/17 6:39:38
人工智能之数学基础:函数的连续性 本文重点 在前面的课程中,我们学习了函数的极限,接下来我们学习函数的连续性。函数的连续性是通过极限定义的,是极限的基本性质之一。 在机器学习中,模型的假设函数往往都被假设成连续的。 极限的定义 如果函数f(x)满足: 那么我们就可以称函数f(x)在a点处连续。 从数… 2026/5/17 6:39:38
人工智能之数学基础:一阶导数 本文重点 一阶导数是微积分学中的核心概念,用于描述函数在某一点的瞬时变化率,其本质是函数变化趋势的量化表达。本文将学习导数,其中一阶导数是最基础的。导数是微分学的核心概念,通过导数我们可以确定函数的单调性、凹凸性、极值等。 导数的定义 导数定义为函数的自变… 2026/7/4 22:29:51
山西环氧彩砂地坪漆品质优良 近年来,随着工业与商业场所对地面装饰性、耐磨性及环保性要求的不断提升,环氧彩砂地坪漆凭借其独特的质感与性能,在山西地区逐渐成为厂房、车库、展厅等场景的热门选择。本文将从材料特性、施工标准及区域市场格局等角度,为您深度… 2026/7/5 7:06:01
PCF8591与PIC18F86K22信号转换系统设计指南 1. 信号转换系统的硬件选型与特性解析在嵌入式系统开发中,模拟信号与数字信号的相互转换是连接物理世界与数字世界的桥梁。PCF8591作为一款经典的8位ADC/DAC转换芯片,配合PIC18F86K22这款高性能8位单片机,能够构建一个灵活可靠的信号处理系统… 2026/7/5 7:04:00
Display Driver Uninstaller完全指南:解决显卡驱动冲突的终极方案 Display Driver Uninstaller完全指南:解决显卡驱动冲突的终极方案 【免费下载链接】display-drivers-uninstaller Display Driver Uninstaller (DDU) a driver removal utility / cleaner utility 项目地址: https://gitcode.com/gh_mirrors/di/display-drivers-u… 2026/7/5 7:04:00
【复现】基于噪声抑制半监督学习的锂离子电池SOH估计方法(Python代码实现) 💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 🎁… 2026/7/5 6:53:58
【全国二级三级等保】等保测评2.0! 等保2.0!!!全国二级三级等保测评❌ 低价代办:只给文档模板,测评、整改全另收费,报告无法备案,处处隐形消费❌ 单纯咨询服务:只出方案,没人陪测、没人跟进复测,服务单一✅ 我们等保一站式落地&am… 2026/7/5 6:53:58
免费开源AMD Ryzen调试神器:3分钟上手SMUDebugTool硬件掌控完全指南 免费开源AMD Ryzen调试神器:3分钟上手SMUDebugTool硬件掌控完全指南 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址… 2026/7/5 6:51:58
6个月转型AI工程师:实战路径与核心技能 1. 项目概述:6个月转型AI工程师的可行性路径在2023年大模型技术爆发的背景下,AI工程师岗位需求同比增长217%(LinkedIn数据)。不同于传统算法工程师需要3-5年培养周期,现代AI工程师更侧重工程化落地能力。我在硅谷科技公… 2026/7/5 0:01:32
TPAFE0808与PIC18F87K22的多通道信号采集方案 1. 项目背景与核心需求在工业自动化、医疗设备和科研仪器等领域,多通道信号采集与系统监测是基础且关键的技术需求。传统方案往往面临通道数量不足、信号调理复杂、系统集成度低等问题。TPAFE0808作为一款8通道模拟前端芯片,与PIC18F87K22微控制器的组合… 2026/7/5 0:01:32
STC3115与PIC18LF26K80构建高精度电池管理系统 1. STC3115与PIC18LF26K80在电池管理系统中的核心价值在现代电子设备中,电池管理系统(BMS)的重要性不亚于设备的核心处理器。STC3115作为一款高精度电池电量监测IC,与PIC18LF26K80微控制器的组合,构成了一个既能精确监控又能智能管理的完整解… 2026/7/5 0:05:36
6个月转型AI工程师:实战路径与核心技能 1. 项目概述:6个月转型AI工程师的可行性路径在2023年大模型技术爆发的背景下,AI工程师岗位需求同比增长217%(LinkedIn数据)。不同于传统算法工程师需要3-5年培养周期,现代AI工程师更侧重工程化落地能力。我在硅谷科技公… 2026/7/5 0:01:32
TPAFE0808与PIC18F87K22的多通道信号采集方案 1. 项目背景与核心需求在工业自动化、医疗设备和科研仪器等领域,多通道信号采集与系统监测是基础且关键的技术需求。传统方案往往面临通道数量不足、信号调理复杂、系统集成度低等问题。TPAFE0808作为一款8通道模拟前端芯片,与PIC18F87K22微控制器的组合… 2026/7/5 0:01:32
STC3115与PIC18LF26K80构建高精度电池管理系统 1. STC3115与PIC18LF26K80在电池管理系统中的核心价值在现代电子设备中,电池管理系统(BMS)的重要性不亚于设备的核心处理器。STC3115作为一款高精度电池电量监测IC,与PIC18LF26K80微控制器的组合,构成了一个既能精确监控又能智能管理的完整解… 2026/7/5 0:05:36