海外VPS上Squid+Shadowsocks搭建Python代理指南
文章分类:行业新闻 /
创建时间:2025-08-01
想在海外VPS上通过Squid与Shadowsocks为Python程序配置稳定代理?最近有位做跨境电商数据分析的开发者朋友就遇到了类似需求——他的Python脚本需要频繁访问海外数据源,但直接请求容易受网络波动影响,想通过代理优化访问稳定性。本文将结合实际操作经验,手把手教你从安装到配置,最终实现Python程序的灵活代理访问。
为什么选择Squid+Shadowsocks组合?
Squid作为经典的高性能代理缓存服务器,擅长处理HTTP/HTTPS协议的请求,能通过缓存机制加速重复资源访问;Shadowsocks则是轻量级加密代理工具,通过混淆传输绕过网络限制,保障数据传输安全。两者结合后,海外VPS相当于搭建了一个“双重防护”的代理网关:Squid负责前端请求转发与缓存加速,Shadowsocks处理底层加密传输,特别适合Python这类需要频繁调用外部API的开发场景。
第一步:在海外VPS上安装核心工具
要让这套组合运转起来,首先得在海外VPS上安装Squid和Shadowsocks。操作环境以Ubuntu系统为例,其他Linux发行版命令可能略有差异。
安装Squid
Squid可通过系统包管理器直接安装,执行以下命令:
sudo apt-get update # 更新软件源
sudo apt-get install squid # 安装Squid
安装完成后,可通过`sudo service squid status`检查是否启动成功,正常状态会显示"active (running)"。
安装Shadowsocks
Shadowsocks需要Python环境支持,这里用pip安装:
sudo apt-get install python-pip # 安装pip包管理器
sudo pip install shadowsocks # 安装Shadowsocks
如果提示pip版本过旧,可先执行`sudo pip install --upgrade pip`升级。
第二步:配置Shadowsocks加密通道
安装完成后,需要为Shadowsocks设置基础参数。新建一个配置文件`ssconfig.json`(建议存放在`/etc/shadowsocks/`目录,方便管理):
{
"server": "0.0.0.0", # 监听所有网络接口
"server_port": 8388, # 服务端口(可自定义,需确保VPS防火墙放行)
"local_address": "127.0.0.1", # 本地监听地址
"local_port": 1080, # 本地转发端口(后续Squid会用到)
"password": "your_strong_password", # 连接密码(建议复杂度高)
"timeout": 300, # 超时时间(秒)
"method": "aes-256-cfb" # 加密方式(推荐强加密算法)
}
保存后启动Shadowsocks服务:
sudo ssserver -c /etc/shadowsocks/ssconfig.json -d start # 后台启动
若要停止服务,将`start`替换为`stop`即可。
第三步:配置Squid转发规则
接下来需要让Squid“知道”如何将请求转发给Shadowsocks。编辑Squid的主配置文件`/etc/squid/squid.conf`(修改前建议备份原文件),在文件末尾添加:
http_port 3128 # Squid监听的HTTP代理端口(供Python程序调用)
cache_peer 127.0.0.1 parent 1080 0 no-query no-digest default proxy-only # 指定Shadowsocks作为上游代理
never_direct allow all # 所有请求都通过代理转发(根据需求可调整)
修改完成后,重启Squid使配置生效:
sudo service squid restart
可以用`netstat -tlnp | grep squid`检查3128端口是否监听成功。
第四步:Python代码调用代理
现在海外VPS上的代理链路已打通,Python程序只需指向Squid的3128端口即可。以常用的`requests`库为例,示例代码如下:
import requests
配置代理(http和https都指向Squid的3128端口)
proxies = {
'http': 'http://127.0.0.1:3128',
'https': 'http://127.0.0.1:3128'
}
测试访问(替换为实际需要访问的URL)
test_url = 'https://api.example.com/data'
try:
response = requests.get(test_url, proxies=proxies, timeout=10)
print(f"请求成功,状态码:{response.status_code}")
# 处理返回数据...
except Exception as e:
print(f"请求失败:{str(e)}")
如果遇到连接问题,可检查:VPS防火墙是否放行3128和8388端口;Shadowsocks和Squid服务是否正常运行(`sudo service squid status`和`ps aux | grep ssserver`);配置文件中的端口是否对应。
通过这套组合,海外VPS能为Python程序提供稳定的代理服务,无论是跨境数据采集还是海外API调用,都能有效提升访问效率与稳定性。实际使用中可根据需求调整Squid的缓存策略(如`cache_dir`设置缓存路径)或Shadowsocks的加密方式(如更换为`chacha20-ietf-poly1305`),进一步优化性能。