这年头,谁还没个翻墙的需求呢。公司内网限制,查个资料都得绕地球一圈,视频加载到一半卡住,让人恨不得砸了电脑。于是,自己搭个代理服务器,成了不少技术宅的首选。不是说花钱买服务不行,可总归心里不踏实,数据握在别人手里,谁知道哪天就被封了,或者被偷偷记录下来。自己动手,丰衣足食,至少心里有底。
市面上的代理方案五花八门,Socks5、HTTP、HTTPS,听着就头大。但要说最接地气、最容易上手的,还得是HTTP代理。浏览器原生支持,配置简单,拿来就用。而且很多应用,比如爬虫、自动化脚本,默认也认HTTP代理。选它,没错。
服务器嘛,现在云服务便宜得跟白菜似的。搬瓦工、Vultr、AWS Lightsail,随便挑一个,月租几块钱到十几块不等。操作系统我偏爱Ubuntu,稳定,社区大,出了问题好找答案。CentOS也行,就是最近几年更新节奏有点乱。系统装好,第一件事就是改密码,别用默认的root密码,太危险。顺手把SSH端口也改了,别守着22号门,省得半夜被扫端口的机器人吵醒。
登录上去,先更新系统。sudo apt update && sudo apt upgrade -y,这个动作得养成习惯。系统补丁不打,等于大门敞开。接着装软件。Squid是个老牌HTTP代理服务器,功能全,配置灵活。虽然有点重,但胜在可靠。一行命令就能装上:sudo apt install squid -y。等它自己跑完,基本环境就有了。
配置文件在 /etc/squid/squid.conf。打开一看,密密麻麻几百行,全是注释。别慌,关键的就那么几处。先找 http_port,把默认的3128改成你想用的端口。别用太常见的,比如8080、8888,容易被盯上。挑个偏门的,比如23333,或者45678,冷门点更安全。改完记得保存。
接下来是访问控制。Squid默认是拒绝所有请求的,得手动放行。ACL(访问控制列表)是它的核心。你可以按IP、域名、时间、甚至用户来设置规则。最简单的,允许某个IP段访问。比如你的家庭宽带IP是动态的,但前三位固定,写个 acl localnet src 192.168.1.0/24,接着再加一行 http_access allow localnet。这样,只有你家里的设备能用这个代理。
但现实哪有这么理想。你在外头,IP变了,连不上。所以得想点别的办法。密码认证是个选择。Squid支持多种认证方式,NCSA最简单。先装个工具:sudo apt install apache2-utils -y。接着生成密码文件:sudo htpasswd -c /etc/squid/passwd your_username。输入两遍密码,搞定。接着在配置文件里加认证模块,指定密码文件路径,再改一下访问规则,要求必须通过认证才能访问。重启Squid,再试,浏览器会弹出登录框,输对了才能上网。这下,不管你在哪,只要有账号密码,就能连。
但密码也不是万能的。万一被人撞库呢?或者你懒得管一堆账号。那可以考虑IP白名单结合动态DNS。比如你家宽带虽然IP会变,但可以用花生壳这类服务,绑个域名。服务器上写个脚本,定时查这个域名的IP,自动更新Squid的ACL。这样既不用密码,又能保证只有你家网络能用。当然,这得你家里有个能跑脚本的设备,比如树莓派或者NAS。
配置完,启动服务:sudo systemctl start squid。检查状态,确保没报错。防火墙也得开个口子,Ubuntu自带ufw,sudo ufw allow 23333,把代理端口放行。云服务商那边的安全组也得配,不然外网还是连不上。这一步很多人忘,结果服务跑着,自己却连不上,干瞪眼。
测试最简单,浏览器设置里填上服务器IP和端口,开个网页看看。能打开,说明通了。不行的话,查日志。Squid的日志在 /var/log/squid/access.log 和 cache.log。access.log 记请求,cache.log 记错误。tail -f 实时看,请求进来有没有记录,有没有被拒绝。通常一看就知道卡在哪。
跑起来之后,性能也得留意。Squid默认会缓存内容,省带宽,加快访问。但缓存太大会吃磁盘。可以调缓存大小,比如 cache_dir ufs /var/spool/squid 100 16 256,意思是最多用100MB磁盘。内存缓存也有限制,cache_mem 64 MB,别设太大,小服务器吃不消。
还有个坑是DNS解析。代理服务器在国外,解析国内网站可能慢,甚至解析到国外节点,视频反而更卡。可以在配置里指定DNS服务器,比如用阿里云的223.5.5.5,或者腾讯的119.29.29.29。acl dnservers dst 223.5.5.5/32,接着 allow 掉。这样所有DNS查询都走国内线路,访问国内站就快了。
稳定性方面,Squid本身挺稳,但服务器挂了就全完了。所以监控得跟上。可以用简单的cron脚本,每隔几分钟curl一下本地代理端口,不通就自动重启服务。更高级的,搭个Prometheus+Grafana,看流量、连接数、响应时间,一目了然。不过对个人用,可能有点杀鸡用牛刀。
安全永远不能松。除了改端口、加密码、设白名单,定期看日志也很重要。有没有异常IP频繁连接?有没有大量403拒绝记录?这些都可能是被扫描或攻击的迹象。发现不对,立马封IP。Squid支持用squidGuard做内容过滤,防恶意网站,但配置复杂,一般人用不着。
还有人用Nginx反向代理当HTTP代理。配置更轻量,性能也不错。listen 23333; proxy_pass http://$http_host$request_uri; 几行代码搞定。但功能比Squid弱,比如缓存策略、认证方式没那么灵活。适合简单场景。
折腾一圈下来,你会发现,搭代理不难,难的是维护。系统更新、日志清理、磁盘监控,都得定期看。不然哪天磁盘满了,服务挂了都不知道。自动化脚本能省不少事。比如写个脚本每周清理一次日志,每月重启一次服务,避免内存泄漏。
用了几个月,速度确实比公共代理稳。看YouTube 1080p不卡,爬数据也快。偶尔服务器商抽风,网络抖动,但总体满意。自己搭的,用着踏实。哪天不想用了,删掉服务器,数据一点不留。这种掌控感,是花钱买服务给不了的。
当然,这东西别干坏事。翻墙看资讯、查资料没问题,搞爬虫别太狠,别扰民。技术是中立的,用得好是工具,用歪了就是麻烦。服务器商也有条款,别碰P2P、别跑挖矿,不然分分钟被封。
回过头看,整个过程就像搭乐高。选零件,拼起来,调细节,修bug。没有标准答案,每个人环境不同,需求不同,方案也不同。网上的教程千篇一律,照着做未必行。得自己试,自己调。出错了不怕,看日志,搜错误信息,社区里一问,往往就有答案。这种解决问题的过程,反而最有意思。