shadowsocks使用的是socket代理,由于很多应用下面无法配置socket代理或者比较麻烦,此处提供一个教程将shadowsocks转换为http代理,用的小工具为polipo——一个小型代理服务软件,可以将socket代理转换为http代理。
Prelight
1.一个已经配置好的shadowsock代理,此处我们假定你的代理端口为1080.
2.安装polipo,ubuntu下直接安装即可。sudo apt-get install polipo
配置polipo
1.停止polipo服务 sudo service polipo stop
2.编辑polipo配置文件/etc/polipo/config,添加如下内容:
socksParentProxy = localhost:1080
proxyPort = 8787
3.启动polipo服务 sudo service polipo start
应用中配置http代理
app里面配置http_proxy=http://127.0.0.1:8787
bash里面可以编辑$HOME/.bashrc,添加export http_proxy=http://127.0.0.1:8787导出环境变量。当前bash要执行source $HOME/.bashrc来使配置文件生效。
Git配置git config --global http.proxy 127.0.0.1:8787
更新
笔者本人的linux发行版是ubuntu16.04,最近突然发现polipo启动不了了,运行service polipo start的时候报如下错误:
Failed to restart polipo.service: Unit polipo.service not found.
出现问题的主要原因是ubuntu16.04中使用的是systemd来管理daemon进程(即使我们使用service xx start来启动服务,也会被跳转到systemd中,变成systemctl start xxx),systemd需要使用/lib/systemd/system/目录下的*.service文件来启动服务,就好像ubuntu14.04以前的/etc/init.d/下面的service文件一样。有人会纠结为什么polipo刚开始安装的时候也没有polipo.service文件,也能正常启动,或者更有为什么我本地有很多软件都只有/etc/init.d/下面的service文件,却能够正常启动呢。这是因为系统在启动的时候会调用一个systemd-sysv-generator来生成与/etc/init.d/目录下对应的service文件,但不确定是由于什么原因,可能是文件格式不兼容,polipo的service文件无法生成,导致启动失败,所以我们需要自己创建一个service文件来完成这个工作。用root用户编辑/lib/systemd/system/polipo.service文件,输入一下内容:
[Unit]
Description=Polipo Proxy Server
[Service]
ExecStart=/usr/bin/polipo
ExecReload=/bin/kill -USR1 $MAINPID
[Install]
WantedBy=multi-user.target
保存退出。
systemctl daemon-reload
systemctl restart polipo #或者service polipo restart