前言
tinyproxy是一个开源的正向代理软件,仓库位于github,tinyproxy - a light-weight HTTP/HTTPS proxy daemon for POSIX operating systems。
提及代理技术,必谈Nginx。Nginx可能是地球上最著名的反向代理,也是最早解决C10K问题的服务器软件。但Nginx并不能满足作为一个正向代理的技术需求,因为Nginx不支持https的正向代理。
不支持https的技术原因是Nginx没有实现http1.1 Connect方法。关于Connect和隧道技术,详见RFC2817。另外知乎上也有一个讲得很不错的答案。什么是HTTP隧道,怎么理解HTTP隧道呢?。隧道的含义大约就是帮助无法完成TLS握手的代理服务器透传可以完成TLS握手的客户端请求,而不再解析流量中的内容。
没有实现Connect的结果就是Nginx无法将加密的https报文正确地代理到要去的地方,而Nginx作者的意思是,Nginx没有必要再去实现https的正向代理了,市面上已经有很多实现了。因此经过一些调查,选择了这款tinyproxy作为正向代理的研究对象。
使用
编译依赖(ubuntu14)
$ sudo apt-get install asciidoc autotools-dev automake
下载编译
$ git clone https://github.com/tinyproxy/tinyproxy
$ cd tinyproxy
$ ./autogen.sh
$ ./configure
$ make
$ make install
apt安装
或者可以选择直接安装
$ sudo apt-get install tinyproxy
配置文件简介
默认配置文件为/etc/tinyproxy.conf
重要配置如下:
代理端口
Port 8888
连接最大空闲时间
Timeout 600
日志文件位置和日志级别
Logfile "/var/log/tinyproxy/tinyproxy.log"
LogLevel Info
最大客户端数量
MaxClients 100
最大最小服务进程
MinSpareServers 5
MaxSpareServers 20
其实进程数
StartServers 10
子进程最大连接数
MaxRequestsPerChild 0
网段限制,客户端必须位于网段内,否则请求被拒绝
Allow 127.0.0.1
Allow 10.0.0.0/8
http header Via的值
ViaProxyName "tinyproxy"
http Connect 端口
ConnectPort 443
ConnectPort 563
golang example
func main(){
proxy := func(_ *http.Request) (*url.URL, error) {
return url.Parse("http://127.0.0.0:8888")
}
transport := &http.Transport{Proxy: proxy}
proxy_client = &http.Client{
Transport:transport,
}
proxy_client.Get(...)
}