海淀网站制作服务公司学院网站建设项目的成本计划
海淀网站制作服务公司,学院网站建设项目的成本计划,网站建设 军报,厦门做网站多文章目录部署 Squid 集群 Nginx 虚拟主机#xff0c;实现 Web 页面缓存与完整校验整体架构一、部署后端 Nginx 虚拟主机1. 安装 Nginx2. 配置虚拟主机3. 验证虚拟主机二、部署 Squid 集群#xff08;双节点兄弟模式#xff09;1. 安装 Squid2. 基础配置#xff08;两台配置…文章目录部署 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 节点或增加负载均衡器提升可用性。