1. 项目背景与需求解析
最近接手了一个典型的Web加速优化需求:需要将madama.cn和www.madama.cn的访问流量通过Squid反向代理转发到后端宝塔服务器。这种架构在电商、内容型网站中很常见,主要解决以下几个痛点:
- 流量卸载:将静态资源缓存到边缘节点,减轻后端服务器压力
- 安全隔离:反向代理隐藏真实服务器IP,降低直接暴露风险
- 访问加速:利用Squid的内存缓存特性提升响应速度
选择Squid 6.13作为反向代理(HTTP加速器)而非Nginx,主要基于其三大优势:
- 成熟的缓存机制(支持ESI片段缓存)
- 更低的内存占用(实测同等流量下比Nginx少30%内存)
- 原生支持ICP协议(便于后续扩展缓存集群)
2. 环境准备与依赖安装
2.1 基础环境配置
代理服务器需要:
- 纯净的CentOS 7.9系统(实测Squid在该系统最稳定)
- 2核4G以上配置(建议开启swap防止OOM)
- 已安装Webmin 1.981+(官方最新版)
通过Webmin安装Squid 6.13的特殊注意事项:
# 必须先禁用默认的epel源 sudo sed -i 's/enabled=1/enabled=0/g' /etc/yum.repos.d/epel.repo # 从Squid官方源安装 yum install -y http://www1.ngtech.co.il/repo/centos/7/x86_64/squid-6.13-1.el7.x86_64.rpm2.2 关键依赖项检查
必须确认以下组件版本:
- OpenSSL 1.0.2k+(低于此版本有TLS握手问题)
- Perl 5.16.3+(Webmin控制需要)
- 内核参数调整(防止高并发下端口耗尽):
echo "net.ipv4.ip_local_port_range = 1024 65535" >> /etc/sysctl.conf echo "net.core.somaxconn = 16384" >> /etc/sysctl.conf sysctl -p3. Webmin中Squid配置详解
3.1 初始化代理配置
在Webmin界面按以下路径操作:
- Servers → Squid Proxy Server
- 在"General"选项卡:
- 将"Run as user"改为自定义账户(非root)
- "Visible hostname"设置为proxy.madama.cn
- 在"Ports & Networking":
- 添加监听端口:80和443
- 勾选"Accelerator mode"
关键配置参数说明:
# 内存缓存大小建议为物理内存的1/3 cache_mem 1024 MB # 磁盘缓存目录(SSD设备必改) cache_dir aufs /var/spool/squid 5000 16 256 # 最大并发连接数(根据内存调整) maxconn 40963.2 反向代理规则配置
在"Access Control"选项卡创建转发规则:
- 添加目标域名:
- Destination Domain: madama.cn
- Redirect to: http://backend_server_ip
- 勾选"Accelerator Mode Options":
- Enable SSL Bumping: Yes
- Generate SSL Cert: Yes
对于HTTPS的特殊处理:
# SSL证书生成配置 ssl_bump splice all sslproxy_cert_error allow all sslproxy_flags DONT_VERIFY_PEER4. 宝塔后端服务器适配
4.1 后端Nginx配置调整
在宝塔面板中需要修改Nginx配置:
server { listen 80; server_name www.madama.cn; # 关键头信息设置 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $host; # 禁用缓存头干扰 proxy_ignore_headers Set-Cookie Cache-Control; }4.2 会话保持解决方案
由于Squid默认会剥离部分Cookie,需要特别处理会话:
- 在Webmin的"Squid Reverse Proxy"中添加:
acl session_cookies urlpath_regex -i (/login|/cart) cache allow session_cookies- 在后端PHP/Java应用中添加:
// 强制关键Cookie的缓存策略 session_cache_limiter('private_no_expire');5. 性能调优与监控
5.1 缓存策略优化
针对不同内容类型设置缓存规则:
# 图片/css/js缓存7天 refresh_pattern -i \.(jpg|png|gif|css|js)$ 10080 90% 20160 override-expire # 动态页面缓存5分钟 refresh_pattern -i \.(php|jsp|do)$ 5 50% 10 override-lastmod5.2 关键监控指标
建议通过Webmin设置报警阈值:
- 在"Monitoring"选项卡添加:
- 内存使用 >80%
- 磁盘缓存错误 >5次/分钟
- 后端响应时间 >2000ms
- 日志分析命令示例:
# 实时监控访问日志 tail -f /var/log/squid/access.log | grep -E 'TCP_(MISS|HIT)' # 统计缓存命中率 squidclient -p 80 mgr:info | grep 'Request Hit Ratios'6. 故障排查实录
6.1 典型问题解决方案
问题1:502 Bad Gateway
- 检查项:
# 查看Squid与后端连接状态 squidclient -p 80 mgr:peer_status # 测试后端连通性 curl -v http://backend_server_ip - 解决方案:调整Squid的timeout参数
forward_timeout 30 seconds connect_timeout 15 seconds
问题2:CSS/JS加载不全
- 原因:Squid默认会过滤某些Content-Type
- 修复方法:
acl allow_types rep_mime_type -i ^text/css$ ^application/javascript$ http_access allow allow_types
6.2 日志分析技巧
高效日志分析方法:
# 统计TOP 10慢请求 grep 'TCP_MISS' /var/log/squid/access.log | awk '{print $7,$NF}' | sort -k2 -nr | head # 发现异常请求 awk '{print $3}' /var/log/squid/access.log | sort | uniq -c | sort -nr7. 安全加固措施
7.1 访问控制策略
推荐配置:
# 只允许来自指定域名的访问 acl allowed_domains dstdomain .madama.cn .www.madama.cn http_access allow allowed_domains # 阻断扫描行为 acl block_scanners urlpath_regex -i (nmap|sqlmap|wp-admin) http_access deny block_scanners7.2 DDoS防护配置
在"Network Options"中设置:
# 连接速率限制 acl OverConnLimit maxconn 50 http_access deny OverConnLimit # 每秒请求限制 delay_pools 1 delay_class 1 2 delay_access 1 allow all delay_parameters 1 1000/1000实际部署后发现,当并发超过2000QPS时,需要额外调整内核参数:
echo "net.netfilter.nf_conntrack_max = 655350" >> /etc/sysctl.conf echo "net.ipv4.tcp_max_tw_buckets = 1440000" >> /etc/sysctl.conf