轻量级的开源代理服务器Tinyproxy安装与配置

article/2025/10/8 19:45:17

TinyProxy

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


tinyproxy版本1.8.3不支持账号密码验证,而版本1.10以上支持

  • 1、如果不需要鉴权,可以直接通过yum install tinyproxy安装默认的1.8版本
  • 2、如果需要鉴权,则要使用1.10以上版本

源码安装

官方下载安装包页面:

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
  • tinyproxy.service 需要修改配置文件中PIDFile 位置
[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 tinyproxy

配置文件参数


名称

tinyproxy.conf - Tinyproxy HTTP 代理守护进程配置文件

描述

tinyproxy(8) 读取它的配置文件,一般存放在 /etc/tinyproxy/tinyproxy.conf路径(或在命令行里用-c参数传递给Tinyproxy的路径)下。该页面描述配置文件的语法和内容。Tinyproxy 配置文件包含很多键值对,每行一对。以 #开头的行或者空白行是注释,会被忽略。关键字不区分大小写,但值内容会区分大小写。如果值内容里包含空格,可以将他们括在双引号"中。可用的关键字及其描述如下:

  • User
    在以root用户身份完成初始端口绑定之后,Tinyproxy进程会以该用户的身份来运行。可以填用户名或UID。
  • Group
    在以root用户身份完成初始端口绑定之后,Tinyproxy进程会以该用户组的身份来运行。可以填组名或GID。
  • Port
    Tinyproxy服务将侦听的端口。 如果端口小于 1024,则需要以 root 用户的身份启动 Tinyproxy 进程。
  • Listen
    在默认情况下,Tinyproxy 会侦听在所有可用接口上的连接(即,侦听地址 0.0.0.0)。通过配置此参数,Tinyproxy 可以被告知仅侦听一个特定地址。注释掉就是监听所有。
  • Bind
    这允许您指定 Tinyproxy 将绑定到哪个目标地址,以将其连接到Web服务器或上游代理。
  • BindSame
    如果此布尔值选项被设置为 Yes,Tinyproxy 会将目标地址设定为触发了传出请求的传入连接的IP地址。
  • Timeout
    Tinyproxy关闭连接之前,允许该连接处于非活动状态的最大秒数。
  • ErrorFile
    该选项控制 Tinyproxy 如果遇到特定的HTTP错误时,会返回哪个HTML文件。它包含两个参数,错误号、HTML错误文件的路径。
  • DefaultErrorFile
    该选项控制如果发生未配置的错误时,返回的HTML模板文件。
  • StatHost
    该选项配置被当作统计主机的主机名或者IP地址:每当收到对该主机的请求时,Tinyproxy 会返回内部统计信息页面,而不会将请求转发给该主机。此页面的模板可以使用 StatFile 配置项进行配置。StatHost 的默认值为 tinyproxy.stats
  • StatFile
    该选项配置 Tinyproxy 在收到对统计主机的请求时发送的HTML文件。如果未设置此选项,Tinyproxy 将返回一个硬编码的基本统计信息页面。有关详细信息,请参见 tinyproxy(8) 手册页中的 STATHOST 部分。需要注意的是,使用StatFile 以及 ErrorFile 和 DefaultErrorFile 选项配置的错误文件都是模板文件,其中可以包含一些模板变量,并由 Tinyproxy 在发送时进行扩展。例如,"{cause}" 表示简短的错误描述,"{detail}"表示详细的错误消息。tinyproxy(8) 手册页包含所有模板变量的描述。
  • LogFile
    该选项控制 Tinyproxy 将调试输出写入文件的位置。 此外,Tinyproxy 可以将日志输出到syslog - 请参阅 Syslog 选项。
  • Syslog
    当设为 On 时,此选项告知 Tinyproxy 将其调试消息写入syslog,而不是写入由 LogFile 所配置的日志文件。这两个选项是互斥的。
  • LogLevel
    设置日志级别。高于或等于该设置项级别的日志消息会被记录。例如,如果LogLevel设为 Warning,则从WarningCritical级别的所有日志消息会被输出,但Notice或更低等级的日志消息会被过滤掉。允许的取值如下:
Critical(最简洁)
Error
Warning
Notice
Connect(不包含Info的连接日志)
Info(最详细)
  • PidFile
    该选项控制 Tinyproxy 主进程将其进程 ID 号存入的文件路径,用于处理信号。
  • XTinyproxy
    将此选项设置为Yes将通知Tinyproxy将包含客户端IP地址的标头X-Tinyproxy添加到请求中。
  • Upstream,No Upstream
    该选项允许您设置一组基于所访问站点主机或域的规则,来选择是否使用某些上游代理服务器。这些规则按照在配置文件中录入的顺序存储,并且在使用时 最后一条 所匹配的规则会生效。有以下三种指定上游主机的方式:
  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 为每一个连接的客户端创建一个子进程。 此选项指定可创建的最大进程数量。 也就是说,至多只有 MaxClients这么多个客户端可以同时连接到 Tinyproxy。
  • MinSpareServers, MaxSpareServers
    Tinyproxy 始终保留一定数量的空闲子进程,以保证它可以快速处理新传入的客户端请求。 MinSpareServer 和 MaxSpareServers 控制备用进程数的最大值和最小值。即,当备用服务器的数量降至 MinSpareServers以下时,Tinyproxy 将在后台开始创建新的备用进程,而当备用进程的数量超过 MaxSpareServers 时,Tinyproxy 将杀死多余的进程。
  • StartServers
    初始化启动的服务进程数。一般应将其设置为位于 MinSpareServersMaxSpareServers 之间的值。
  • MaxRequestsPerChild
    此选项限制一个子进程在终止之前将会处理的最大连接数。 默认值为0,即无限制。此选项是在出现内存泄漏问题时可采取的紧急措施。 在这种情况下,请将 MaxRequestsPerChild 设置为例如100010000,可能会有用。
  • Allow, Deny
    Allow和Deny选项用于自定义允许哪些客户端访问Tinyproxy。 Allow和Deny行可以在配置文件里重复出现,以构建Tinyproxy的访问控制列表。在配置文件中的顺序很重要。 如果没有 Allow 或 Deny 行,则允许任意的客户端。反之,默认的操作是拒绝访问。 允许或拒绝的参数可以配置为客户端主机的单个IP地址,例如 127.0.0.1,IP地址范围,例如 192.168.0.1/24,或将与客户端主机名尾端匹配的字符串, 可以是完整的主机名,例如 host.example.com,或域名,例如.example.com,或者顶级域名,例如.com
  • BasicAuth root 123456

​ 账号密码认证

  • AddHeader
    配置一个或多个 HTTP 请求标头,用于添加到由 Tinyproxy 发出的 HTTP 请求中。 需要注意的是,此选项不适用于 HTTPS 流量,因为 Tinyproxy 无法控制要交换的标头。
AddHeader "X-My-Header" "Powered by Tinyproxy"
  • ViaProxyName
    RFC 2616 要求代理将 Via 标头添加到 HTTP 请求中,但使用真实主机名可能会引起安全问题。 如果设置了 ViaProxyName 选项,其字符串值将用作 Via 标头中的主机名。 否则,将使用服务器的主机名。
  • DisableViaHeader
    该选项设置为 yes 时,Tinyproxy 不会将 Via 标头添加到请求中。 这实际上就使 Tinyproxy 进入了隐身模式。请注意,RFC 2616 要求代理设置 Via 头,因此启用此选项会破坏合规性。 除非您知道自己在做什么,否则不要禁用 Via 标头…
  • Filter
    Tinyproxy 支持基于 URL 或域的网站过滤。 此选项指定包含过滤规则的文件的位置,每行一条规则。
  • FilterURLs
    如果此布尔选项设置为 YesOn,则根据 URL 执行过滤,而不根据域执行过滤。默认设置为根据域进行过滤。
  • FilterExtended
    如果此布尔选项设置为 Yes,则扩展的 POSIX 正则表达式将用来匹配过滤器规则。默认使用基本 POSIX 正则表达式。
  • FilterCaseSensitive
    如果此布尔选项设置为 Yes,则过滤器规则匹配时会区分大小写。 默认匹配时不区分大小写。
  • FilterDefaultDeny
    默认的过滤策略会允许所有与过滤规则不匹配的内容。 将 FilterDefaultDeny 设置为 Yes 会更改该策略,从而拒绝在过滤规则所匹配的域或URL之外的任何内容。
  • Anonymous
    如果设置了 Anonymous 选项,则启用匿名代理。由 Anonymous 配置的标头被允许通过,其他标头会被拒绝。 如果未配置 Anonymous 选项,则允许所有标头通过。您必须给标头内容加上引号。
    大多数站点都需要启用 cookie 才能正常工作,因此,如果您访问这种站点,需要允许 cookie 通过。
    用法举例:
Anonymous "Host"
Anonymous "Authorization"
Anonymous "Cookie"
  • ConnectPort
    此选项用于指定 CONNECT 方法所允许的端口。 如果找不到 ConnectPort 行,则允许所有端口。若要完全禁用 CONNECT,请仅设置一条值为 0 的 ConnectPort 选项行。
  • ReversePath
    配置一条或多条 ReversePath 选项,以启用反向代理支持。 使用反向代理,可以使许多站点看起来像是单个站点的一部分。
    配置以下指令,并在自己的计算机上的端口 8888上运行 Tinyproxy,则可以通过 http://localhost:8888/example/来访问站点 example.com
ReversePath "/example/" "http://www.example.com/"
  • ReverseOnly
    当把 Tinyproxy 用作反向代理时,强烈建议将此布尔选项设置为 Yes ,从而关闭普通代理功能。
  • ReverseMagic
    将此选项设置为Yes,可让 Tinyproxy 使用 cookie 来跟踪反向代理的映射。 如果您需要反向具有绝对链接的代理站点,必须启用此选项。
  • ReverseBaseURL
    用于访问此反向代理的URL地址。 该 URL 会被用于重写 HTTP 重定向地址,以使它们不会绕过代理。 如果您有一连串的反向代理,则需要在此处放置最外层的 URL(也就是终端用户在其浏览器中键入的地址)。如果未设置此选项,则不会修改重定向。

踩的坑

1. curl: (35) TCP connection reset by peer

image-20220830101826663

记得开启防火墙


http://chatgpt.dhexx.cn/article/PJtBC5v3.shtml

相关文章

最新TinyProxy联通卡 停机卡tiny免流模式

tiny模式,默认接点,具体自测 首先下载tiny:https://wwa.lanzous.com/iV6Qdm8qgre 打开tiny,点击右上角将模式复制粘贴进去,完成保存,先查询现有的流量,然后下载一个小软件,过一段时…

java 取交集方法retainAll

java 取交集方法retainAll 有两个集合newCoures和oldCourses,判断这两个集合是否包含相同的对象或元素, 可以使用retainAll方法:oldCourses.retainAll(newCoures)。 如果存在相同元素,oldCourses中仅保留相同的元素。 如果不存…

Java List retainAll 记录坑

描述 我们知道使用List的retainAll方法可以获取两个集合的交集&#xff0c;但是在某些情况下方法的返回值并非我们想象那样。 现象 先看两个例子&#xff1a; public static void main(String[] args) {List<String> a new ArrayList<>();a.add("READ&quo…

关于ArrayList中的retainAll的一些思考

思考 我们都知道&#xff0c;比较两个对象的是否相同&#xff0c;一般是先通过hashcode方法比较hash值是否相等&#xff0c;如果相同&#xff08;哈希碰撞&#xff09;然后通过equals进行比较各个属性值是否相同&#xff0c;如果都相同&#xff0c;那么才是真正的相同。 我们…

java集合中retainAll方法

我们先来看看retainAll的源码 public boolean retainAll(Collection<?> c) {return batchRemove(c, true); } private boolean batchRemove(Collection<?> c, boolean complement) {//获得当前对象的所有元素final Object[] elementData this.elementData;//w…

Java取交集方法retainAll()

1 retainAll方法示例 如何判断一个集合与另外一个集合中有相同的元素 例如A.retainAll(B); 如果AB中有相同的元素&#xff0c;那么A中会保留相同的元素&#xff0c;将不同的元素移除 如果AB中没有相同的元素&#xff0c;那么会返回[] 当A中的元素有变化时会返回true&#…

Java中取多个集合的交集——retainAll()

Java中取多个集合的交集 集合 Collection 接口中定义了 retainAll()方法 retainAll() Retains only the elements in this set that are contained in the specified collection (optional operation). In other words, removes from this set all of its elements that are …

测试工程师面试题答案分类详解

数据库最基本的增&#xff0c;删&#xff0c;改&#xff0c;查&#xff0c; 假设表结构为&#xff1a; create table student( sid number, sname varchar2(50) ) 1.增加&#xff1a;insert into student values(1,张三) 2.删除&#xff1a;delete from student 3.…

软件测试工程师面试题及答案

软件测试工程师试题 一、填空 1、软件测试阶段的基本任务应当是根据软件开发各阶段的 和程序的 &#xff0c;精心设计一批“高产”的测试用例&#xff0c;利用这些测试用例 &#xff0c;找出软件中潜藏的各种错误和缺陷。 2、测试用例不仅要选用合理的测试输入数据&…

测试笔试题

做了几套题&#xff0c;个别题竟然错了。汗颜。摘录下&#xff1a; 1.有关字节换算的 字节 byte&#xff1a;8个二进制位为一个字节(B)&#xff0c;最常用的单位&#xff0c;字节也就是B。 1KB (Kilobyte 千字节)1024B 1MB (Megabyte 兆字节 简称“兆”)1024KBA 1GB (Giga…

测试工程师面试题

选择题 进行兼容性测试的目的在于&#xff08;&#xff09; A、测试程序在不同的平台上可以正常运行B、测试程序与平台上的其他程序可以同时正常运行C、测试数据格式在不同应用程序之间可以通用D、以上选项都正确 某个 Android 应用耗电问题严重&#xff0c;以下那个是可能的…

软件测试工程师面试题汇总

小编热衷于收集整理资源&#xff0c;记录踩坑到爬坑的过程。希望能把自己所学&#xff0c;实际工作中使用的技术、学习方法、心得及踩过的一些坑&#xff0c;记录下来。也希望想做软件测试的你一样&#xff0c;通过我的分享可以少走一些弯路&#xff0c;可以形成一套自己的方法…

100道经典软件测试笔试题(附答案)一次性查缺补漏个够

千呼万唤始出来&#xff0c;很多群友说我看了这么多面试题&#xff0c;但是公司要笔试怎么办&#xff1f;有没有能够笔试给我们练练手&#xff0c;这边我也是特意帮大家整理了这么100道软件测试的笔试题&#xff0c;答案在最后&#xff0c;试试自己能答对多少吧&#xff01;需要…

软件测试工程师笔试题(附带答案)

软件测试题目 一、 判断题 (每题2分&#xff0c;20) 1、软件测试就是为了验证软件功能实现的是否正确&#xff0c;是否完成既定目标的活动&#xff0c;所以软件测试在软件工程的后期才开始具体的工作。 &#xff08;初级&#xff09; &#xff08; &#xff09; 2、发现错误多…

初级测试工程师面试笔试题(附带答案)

1.编写测试用例有哪几种方法&#xff1f; 答&#xff1a;大刚法、等价类、边界值、因果图、场景法、正交法、错误推断法、正则表达式 2.测试的六条基本法则是什么&#xff1f; 答&#xff1a;功能、可靠性、易用性、效率、可维护性、可移植性 3.软件测试分类有哪些&#xff1f;…

2022年最新软件测试工程师笔试真题及答案(搜狐、华为、蓝港在线)

搜狐软件测试工程师笔试真题及答案 试题1&#xff0e;下列哪个覆盖的范围最广&#xff1f;条件、条件组合、语句、判定条件。 答案&#xff1a;条件组合。 试题2&#xff0e;Java Web应用的3层结构是什么&#xff1f; 答案&#xff1a;浏览器/中间层&#xff08;Java ASP等…

hadoop安装前的网络环境配置

1.1 网络配置 对安装好的 VMware 进行网络配置&#xff0c;方便虚拟机连接网络&#xff0c;本次设置建议选择 NAT 模 式&#xff0c;需要宿主机的 Windows 和虚拟机的 Linux 能够进行网络连接&#xff0c;同时虚拟机的 Linux 可 以通过宿主机的 Windows 进入互联网。 1.1.1 编…

Windows下Hadoop的环境变量的配置以及Hadoop的配置文件修改

Hadoop的环境变量的配置 1.进入系统变量&#xff0c;右键单击我的电脑 –>属性 –>高级环境变量配置 –>高级选项卡 –>环境变量 –> 单击新建HADOOP_HOME 2.在系统变量path 里面 添加 %HADOOP_HOME%\bin; 3.测试&#xff1a;打开命令行cmd ,在任意路径下输入h…

Hadoop应用配置

文章目录 hadoop目录配置hadoop角色hadoop运行和使用hadoop 观察FsImage和EditLog分发配置 hadoop目录 bin &#xff1a;功能模块sbin&#xff1a;shell脚本etc&#xff1a;配置lib&#xff1a;使用库 bin和sbin目录都要加入到环境变量中。 vi /etc/profile增加&#xff1a; …