尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Squid反向代理配置与Web加速优化实践

Squid反向代理配置与Web加速优化实践 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/enabled1/enabled0/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.3Webmin控制需要内核参数调整防止高并发下端口耗尽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改为自定义账户非rootVisible 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.cnRedirect to: http://backend_server_ip勾选Accelerator Mode OptionsEnable SSL Bumping: YesGenerate 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 Ratios6. 故障排查实录6.1 典型问题解决方案问题1502 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问题2CSS/JS加载不全原因Squid默认会过滤某些Content-Type修复方法acl allow_types rep_mime_type -i ^text/css$ ^application/javascript$ http_access allow allow_types6.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
返回列表