配置自建HTTP代理遇到的坑

2025.7.9 杂七杂八 1016
33BLOG智能摘要
自建HTTP代理服务器过程中,作者对比了Squid、Nginx和Privoxy,最终选择Privoxy。配置Basic认证时,发现需使用htpasswd生成密码文件,且路径不能含中文。在使用TLS证书时,80端口问题和证书续期后的重启问题导致服务中断。高并发下发现Nginx连接池需调整配置,包括开启TW_REUSE和匹配系统限制。运行稳定后,建议使用监控工具、记录X-Forwarded-For日志和设置防爆破方案。
— 此摘要由33BLOG基于AI分析文章内容生成,仅供参考。

我在自建HTTP代理路上踩过的那些坑

配置自建HTTP代理遇到的坑

大家好,我是33blog的技术博主。最近因为工作需要搭建了一个HTTP代理服务器,本以为是个简单的活,结果踩坑踩到怀疑人生。今天就把这些血泪教训整理出来,希望能帮到有同样需求的你。

选型阶段:Squid还是Nginx?

刚开始我以为随便找个代理软件就能搞定,结果发现水很深。Squid作为老牌代理确实稳定,但配置文件复杂得像天书:

# Squid的典型配置片段
acl localnet src 192.168.1.0/24
http_access allow localnet
http_access deny all

而Nginx虽然配置简单,但proxy_cache的调优参数多得让人头皮发麻。最后我选择了Privoxy,因为它对HTTP头部的处理更灵活,适合我的爬虫项目。

认证配置的玄学问题

最坑的是Basic认证配置。明明按照文档配好了auth_basic,客户端却死活连不上。折腾半天才发现:

  1. 密码文件必须用htpasswd生成
  2. 路径不能包含中文(别笑,我真试过)
  3. Nginx worker进程需要对密码文件有读取权限

后来发现用下面这个命令生成密码最靠谱:

printf "username:$(openssl passwd -crypt password)n" > /etc/nginx/.htpasswd

TLS证书的连环坑

为了让代理支持HTTPS,我决定上TLS证书。Let’s Encrypt的certbot本来很好用,但在代理服务器上:

  • 80端口可能被代理本身占用
  • 需要先用--standalone模式获取证书
  • 续期时要把代理服务停掉(别问我怎么知道的)

最坑的是有次更新证书后忘记重启Nginx,导致全公司爬虫瘫痪半小时…现在我都用systemd timer写自动续期脚本了。

连接池调优的血泪史

当代理服务器遇到高并发时,各种神奇问题就来了:

# Nginx关键配置
proxy_http_version 1.1;
proxy_set_header Connection "";
keepalive_timeout 75;

调优过程中发现:

  • TCP的tw_reuse必须开启
  • Linux默认的somaxconn太小要调整
  • Nginx的worker_connections要和系统限制匹配

写在最后

现在我的代理服务器已经稳定运行三个月了,总结几个实用建议:

  1. 一定要做连接监控(我用Prometheus+Granfa)
  2. 日志要记录X-Forwarded-For
  3. 准备应急方案,比如fail2ban防爆破

自建代理就像养宠物,前期费心调教,后期才能省心。大家如果遇到类似问题,欢迎在评论区交流~

相关推荐HTTP代理

    评论

    • 博主提到的Squid配置确实让人头大,我之前也是被搞得晕头转向,最后直接用现成的方案了 😅

    • Nginx调优太真实了!各种参数看得眼花缭乱,感觉自己像个无头苍蝇试来试去

    • 关于密码文件权限那个坑我也踩过,半夜排查半天才发现是权限问题,差点把电脑砸了

    • 证书续期忘记重启服务太真实了,上次我们生产环境就这么挂过,被老板骂惨了

    • Prometheus监控确实好用,现在我的代理也上了这套监控方案,随时掌握服务状态

    • 感觉这些坑都特别接地气啊,都是实战中才会遇到的问题,收藏了!

    • 调优那段看得我直摇头,尤其是worker_connections和系统的匹配,调不好就各种timeout