Tinyproxy 是一个面向 POSIX 系统开发的轻量级的开源 HTTP/HTTPS 代理守护进程,其从底层开始进行设计,保证了在高速的同时体积依然很小。它很适合用于需要完整 HTTP 代理特性,但系统资源又不足以运行大型代理的场景,比如嵌入式部署。
Tineproxy 采用 GNU GPL 协议(版本2及以上)分发。
Tinyproxy 的体积很小,也仅需少量系统资源。在使用 glibc 时,内存占用一般大约 2 MB,而 CPU 占用会随着连接数量线性增长(具体取决于连接速度)。因此,Tinyproxy 可用在比较老旧的计算机上,或者用在基于Linux的路由器等网络设备上,而不会对设备性能造成明显的影响。
Tinyproxy 的构建和运行仅需一个最小化的 POSIX 环境。同时,它可以用其他附加库来添加额外功能。
Tinyproxy 允许进行 HTTPS 连接的转发,而且无需通过 CONNECT 方法以任何形式修改流量内容(请参阅ConnectPort指令)。
Tinyproxy 支持被配置为一个透明代理,使客户端无需进行任何配置即可使用代理。您也可以将其用作您网站的反向代理前端。
使用 AddHeader 指令,您可以向传出的流量里添加或插入 HTTP 标头信息。
如果您要构建自定义Web代理,可以轻松地修改Tinyproxy以满足您的自定义需求。 源码结构非常简单,遵循 KISS 原则。 因此,可以把它作为基础,来实现您可能需要Web代理执行的任何操作。
Tinyproxy具有隐私功能,可让您配置哪些HTTP标头可被允许通过,哪些HTTP标头应被阻止。 这使您既可以限制从HTTP服务器向Web浏览器发送的数据(例如Cookie),也可以限制从Web浏览器到HTTP服务器发送的数据(例如版本信息)。
通过使用远程监视工具,您可以远程获知代理统计信息,从而确切了解代理的繁忙程度。
您可以配置Tinyproxy来实现 访问控制 ,从而仅允许来自特定子网或特定接口的请求,从而确保那些随机出现的、未经授权的人不能使用您的代理。
只需进行一些配置(具体而言,将Tinyproxy创建的文件设为由非root用户拥有,并让它在大于1024的端口上运行),就能让 Tinyproxy 在没有任何特殊权限的情况下运行,从而将系统受到破坏的风险降至最低。 此外,它的设计致力于防止缓冲区溢出。 代码结构的简单也确保了此类bug易于定位。
tinyproxy版本1.8.3不支持账号密码验证,而版本1.10以上支持
yum install tinyproxy安装默认的1.8版本官方下载安装包页面:
https://github.com/tinyproxy/tinyproxy/releases
./autogen.sh
./configure
make
make install
mkdir /etc/tinyproxy
# 复制配置文件
cp /usr/local/etc/tinyproxy/tinyproxy.conf /etc/tinyproxy/tinyproxy.conf
#配置开机自启
vi /usr/lib/systemd/system/tinyproxy.service
[Unit]
Description=Startup script for the tinyproxy server
After=network.target
[Service]
Type=forking
PIDFile=/var/run/tinyproxy/tinyproxy.pid
ExecStart=/usr/local/bin/tinyproxy -c /etc/tinyproxy/tinyproxy.conf
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
[Install]
WantedBy=multi-user.target
systemctl start tinyproxy systemctl enable tinyproxytinyproxy.conf - Tinyproxy HTTP 代理守护进程配置文件
tinyproxy(8) 读取它的配置文件,一般存放在 /etc/tinyproxy/tinyproxy.conf路径(或在命令行里用-c参数传递给Tinyproxy的路径)下。该页面描述配置文件的语法和内容。Tinyproxy 配置文件包含很多键值对,每行一对。以 #开头的行或者空白行是注释,会被忽略。关键字不区分大小写,但值内容会区分大小写。如果值内容里包含空格,可以将他们括在双引号"中。可用的关键字及其描述如下:
root用户身份完成初始端口绑定之后,Tinyproxy进程会以该用户的身份来运行。可以填用户名或UID。root用户身份完成初始端口绑定之后,Tinyproxy进程会以该用户组的身份来运行。可以填组名或GID。1024,则需要以 root 用户的身份启动 Tinyproxy 进程。0.0.0.0)。通过配置此参数,Tinyproxy 可以被告知仅侦听一个特定地址。注释掉就是监听所有。Yes,Tinyproxy 会将目标地址设定为触发了传出请求的传入连接的IP地址。tinyproxy.stats。"{cause}" 表示简短的错误描述,"{detail}"表示详细的错误消息。tinyproxy(8) 手册页包含所有模板变量的描述。syslog - 请参阅 Syslog 选项。On 时,此选项告知 Tinyproxy 将其调试消息写入syslog,而不是写入由 LogFile 所配置的日志文件。这两个选项是互斥的。Warning,则从Warning到Critical级别的所有日志消息会被输出,但Notice或更低等级的日志消息会被过滤掉。允许的取值如下:Critical(最简洁)
Error
Warning
Notice
Connect(不包含Info的连接日志)
Info(最详细)
Yes将通知Tinyproxy将包含客户端IP地址的标头X-Tinyproxy添加到请求中。 upstream host:port 开启一个常规形式的上游代理
upstream host:port "site_spec" 为匹配 site_spec 的站点启用上游代理
no upstream "site_spec" 为匹配 site_spec 的站点禁用上游代理
站点可以用主机名、域名、IP范围等形式来指定:
.name 匹配任何在域 name 中的主机
. 匹配任何无域名的主机(在空域名中)
IP/bits 匹配IP地址/掩码位数
IP/mask 匹配IP地址/掩码
MaxClients这么多个客户端可以同时连接到 Tinyproxy。MinSpareServers以下时,Tinyproxy 将在后台开始创建新的备用进程,而当备用进程的数量超过 MaxSpareServers 时,Tinyproxy 将杀死多余的进程。MinSpareServers和 MaxSpareServers 之间的值。0,即无限制。此选项是在出现内存泄漏问题时可采取的紧急措施。 在这种情况下,请将 MaxRequestsPerChild 设置为例如1000 或 10000,可能会有用。127.0.0.1,IP地址范围,例如 192.168.0.1/24,或将与客户端主机名尾端匹配的字符串, 可以是完整的主机名,例如 host.example.com,或域名,例如.example.com,或者顶级域名,例如.com。 账号密码认证
AddHeader "X-My-Header" "Powered by Tinyproxy"
Yes 或 On,则根据 URL 执行过滤,而不根据域执行过滤。默认设置为根据域进行过滤。Yes,则扩展的 POSIX 正则表达式将用来匹配过滤器规则。默认使用基本 POSIX 正则表达式。Yes,则过滤器规则匹配时会区分大小写。 默认匹配时不区分大小写。Yes 会更改该策略,从而拒绝在过滤规则所匹配的域或URL之外的任何内容。Anonymous "Host"
Anonymous "Authorization"
Anonymous "Cookie"
0 的 ConnectPort 选项行。8888上运行 Tinyproxy,则可以通过 http://localhost:8888/example/来访问站点 example.com。ReversePath "/example/" "http://www.example.com/"
Yes ,从而关闭普通代理功能。Yes,可让 Tinyproxy 使用 cookie 来跟踪反向代理的映射。 如果您需要反向具有绝对链接的代理站点,必须启用此选项。curl: (35) TCP connection reset by peer