thebadzhang 发布的文章

$$\lim f(x)=A,\lim g(x)=B$$

$$\lim{[f(x)\pm g(x)]}=\lim{f(x)}\pm\lim{g(x)}=A\pm B$$

$$\lim{[f(x)\times g(x)]}=\lim{f(x)}\times\lim{g(x)}=A\times B$$

保号性:

$$若 \lim_{x \to x_0 }{f(x)=A},且A>0(或A<0)$$

保序性

$$设\lim_{x \to x_0}{f(x)}=A$$

子列收敛性

$$若\lim_{x\to a}{f(x)}=A,\数列 f(xn) 是 f(x) 当 x\to a 时的一个子列,\则有 \lim{n\to \infty}{f(x_n)}=A$$

$$\lim{x\to 0}{\frac{\sin x}{x}}=1\ \lim{n\to\infty}{n\sin{\frac{1}{n}}}=1\ \lim_{n\to\infty}{\sqrt{n}nn\frac{1}{\sqrt{n}}}=1$$

$$\lim_{x\to 0}{x\sin{\frac{1}{x}}}$$

无穷小x有界=无穷小

无穷小x常数=无穷小

证明$\lim_{x\to 0}{\sin{\frac{1}{x}}}$不存在

令$x_n=\frac{1}{n\pi}$

$\lim_{n\to 0}{xn}=0,x_n\neq 0$

$$\cancel{asdfsafasdfasdfasdfasdfasFasfasdfasdfasdfasfdf}$$

$$xn'={\frac{1}{\frac{4n+1}{2}\pi}},\lim{n\to\infty}x_n'=0,且x_n'\neq 0$$

$$\begin{bmatrix}2 & 3 & 3 \ 2 & 1 & 2 \ 1 & 5 & 4\end{bmatrix} = 2\times 3+3\times2+6\times5-3-20-18$$

$$若 AB=E, BA=E A,B 都是可逆矩阵,且互逆。$$

$$x\to\infty, \lim_{x\to\infty}{f(x)}=A$$

$$\forall\epsilon>0,\because x>0,使得x>X,恒有|f(x)-A|<\epsilon$$

$$x\to-\infty,\lim_{x\to\infty}{f(x)}=A$$

$$\forall\epsilon>0,\because x>0,使当 x< -X时,恒有 |f(x)-A|<\epsilon$$

$$证明\lim_{x\to\infty}{\frac{\sin{x}}{x}}=0,

|\frac{\sin{x}}{x}-0|=|\frac{\sin{x}}{x}<\frac{1}{|x|}<\epsilon,即|x| >\frac{1}{\epsilon}

\forall\epsilon>0,取X=\frac{1}{\epsilon},则当|x| >X时恒有|\frac{\sin{x}}{x}-1|<\epsilon

故 \lim_{x\to\infty}{\frac{\sin{x}}{x}}=0$$

$$\left{ \begin{array}{rl}

2x_1-x_2 =& 5, \

3x_1+2x_2=& 11

\end{array} \right.$$

$$D=\begin{vmatrix}2 & -1 \ 3 & 2\end{vmatrix}=7,D_1=\begin{vmatrix}5 & -1 \ 11 & 2\end{vmatrix}=21,D_2=\begin{vmatrix}2 & 5 \ 3 & 11\end{vmatrix}=7,$$

由 $D=7\neq0$知方程有唯一解:

$$x_1=\frac{D_1}{D}=3,x_2=\frac{D_2}{D}=1.$$

$$A=\begin{bmatrix}

1 & 3 & -2 & 2 \

0 & 2 & -1 & 3 \

-2 & 0 & 1 & 5

\end{bmatrix}

\xlongequal{\begin{aligned}r_3-2r_1 \ r_3-3r_2\end{aligned}}

\begin{bmatrix}1 & 3 & -2 & 2 \0 & 2 & -1 & 3 \0 & 0 & 1 & 0\end {bmatrix}

$$

https://www.zhihu.com/question/302351453

对称矩阵的解法

$A$普通矩阵

$A^{-1}$逆矩阵

$B=\frac{1}{|A|}A^*$

$(A^*)^{-1}=\frac{1}{|A|}A$

$AB=BA=E$

$A\frac{1}{|A|}A^=\frac{1}{|A|}A^A=E$

$$

\begin{vmatrix}

\frac{a}{ac-bc} & \frac{b}{ac-bc} \

\frac {c}{ac-bc} & \frac{d}{ac-bc}

\end{vmatrix}

$$

伴随矩阵

https://baike.baidu.com/item/%E4%BC%B4%E9%9A%8F%E7%9F%A9%E9%98%B5/10034983

https://www.zhihu.com/question/360606456

http://www2.edu-edu.com.cn/lesson_crs78/self/j_4184/soft/xxzd02.html

分析,对。。。

要使。。。

则需。。。

故。。。

矩阵乘法与逆矩阵

行列式的定义

克拉默法则

逆矩阵

方阵的逆矩阵

https://zhuanlan.zhihu.com/p/95725643

行列式的性质与计算

二阶和三阶行列式

特征值与特征向量

矩阵的秩

http://www2.edu-edu.com.cn/lesson_crs78/self/j_0022/soft/ch0605.html

矩阵相似对角化

分块矩阵

n维向量及线性运算

向量空间

矩阵的运算

如果n阶方阵$A,B$可逆

$A^{-1}=\frac{1}{|A|}A^*$

$(A^{-1})^{-1}=A$

$(\lambda A)^{-1}=\frac{1}{\lambda}A^{-1}$

$(A^T)^{-1}=(A^{-1})^T$

$(AB)^{-1}=B^{-1}A^{-1}$

https://zhuanlan.zhihu.com/p/340635814

https://zhuanlan.zhihu.com/p/186266784

$A^{-1}=B \Longleftrightarrow AB=E$

$(A^{-1})^{-1}=A\Longleftrightarrow A^{-1}A=E$

$(A^T)^{-1}=(A^{-1})^T\Longleftrightarrow A^T(A^{-1})^T=(A^{-1}A)^T=E=E^T$

$\frac{1}{\lambda}A^{-1}\times\lambda A=(\frac{1}{\lambda}\lambda)A^{-1}\times A = 1:E=E$

等价关系

  1. 反身性:$A\Longleftrightarrow A$

  2. 对称性:$若 A \Longleftrightarrow B,则 B\Longleftrightarrow A$

  3. 传递性:$若 A \Longleftrightarrow B,B \Longleftrightarrow C,则 A \Longleftrightarrow C$

初等变换

$P_j+r_i$

$r_i+r_j$

阶梯形矩阵

可以画出一条阶梯线,先的下方全是0

每个台阶只有一个

$$\begin{matrix}

1 & 0 & -1 & 0 & 4 \

0 & 1 & -1 & 0 & 3 \

0 & 0 & 0 & 1 & -3 \

0 & 0 & 0 & 0 & 0

\end{matrix}$$

设存在一个初等矩阵,$P_1,P_2,\dots,P_n$

使得$A=P_1P_2\dots P_n$

$\because$初等矩阵可逆$\therefore$$A$可逆

设 A 可逆,目标 A 的标准形为

$$F=\begin{bmatrix}E_r & 0 \ 0 & 0\end{bmatrix}$$

则 $F\backsim A_1$,即 $F$ 经过有限次初等变换,可变为 $A$,即存在有限次初等变换,使$P_1P_2\cdots PnFP{X+1}\cdots P_i=A$

$\because A_1,P_1,P_2\cdots P_i 均可逆$

$\therefore F$可逆

$\therefore r= n_1$

即 $E=F$,$\therefore A=P_1P_2\cdots P_rEP_r+\cdots P_i$

  1. $r(AB)\leq \min{{r(A),r(B)}}$

  2. $r\Biggl({\begin{pmatrix}A & 0 \ 0 & B\end{pmatrix}}\Biggl)\xlongequal{}r(A)+r(B)$

  3. $r(子矩阵)\leq r(包含子矩阵的分块矩阵)$比如$r\Bigl((AB)\Bigl)\leq r\Biggl({\begin{pmatrix}A & B \ 0 & C\end{pmatrix}}\Biggl)$再如$r(A)\leq r\Biggl({\begin{pmatrix}A & B \ C & D\end{pmatrix}}\Biggl)$

特征值

https://zhuanlan.zhihu.com/p/142597513

极大线性无关组

https://blog.csdn.net/kukumer/article/details/107126031

有关秩的几个重要式子

https://blog.csdn.net/guoziqing506/article/details/80557920

奇异矩阵

矩阵的分解

sdf

sdf

sd

sd

sd

a

sd

d

f

https://blog.csdn.net/qq_38943651/category_9417843.html

https://www.zhihu.com/column/c_1086313475025907712

微积分初步

函数、导数与微分

我们首先学习导数和微积分等概念和有关的基本运算方法

变量、常量和函数

会变化的量叫变量,不会变化的量叫做常量


pi<const> = 3.14159265357

x = 3

自变量和因变量

现有两个互相联系的两个变量$x$和$y$,如果当$x$在其变域$\mathscr{D}$内任意取一数值时,都有确定的值与之对应,则称$y$时$x$的函数,$x$叫做自变量,函数$y$又称作因变量,写作:

$$y=f(x)$$

变域$\mathscr{D}$为自变量的变化范围,称作函数$f(x)$的定义域,而所有的数值则构成$y$的值域$\mathscr{R}$例如,

若$y$为$z$的函数,$y=f(x)$;而$z$又是变量$x$的函数,即$z=g(x)$,则称$y$为$x$的复合函数,记作

$$y=\phi(x)=f[g(x)]$$

导数


daoshu = function (fx, x, dx)

    assert (fx == "function", "第一个[参数]^(Parameter)必须是一个函数")

    assert (x, "请输入你想要计算的那个点")

    if not dx then dx = 1E-12 end

    return (fx(x+dx)-fx(x))/dx

end

如此这般操作,我们就实现了一个拥有强鲁棒性的导数计算工具,但是由于计算机底层运算本身所具有的不精确性,而且我们也没有使用较为复杂的方法进行计算,可能会导致结果有所偏差,但是误差应该会在1%以下

函数的极值点和极值

微分

不定积分

原函数

不定积分

不定积分的运算法则

定积分

定积分的概念

定积分的主要性质

牛顿-莱布尼茨公式

C/C++ 入门前提须知不完全指北

本文档用于指导学校不大可能会教,但是又必知的要点(知道有,能简单用就好了,深入的学习还请在深入了解了 c/c++ 之后再做详细的研究学习

也有可能是在后面会教,或是在学习的过程中就学会了……

C 版本与 C++ 版本

K&B C

ANSI C

ISO C

c89

c99

c11

c17

C++98

C++03

C++11

C++14

C++17

C++20

C++23

gcc

mingw

mingw-w64

tdm-gcc

clang-llvm

msvc

末流

borderland++

intel++

大部分的学校所使用的 IDE 无非逃不开 devcpp 5.11 code::blocks VC2010 VC6,这么几种选择。

VC6 属于历史惯性,虽然已经是 上个世纪 98 年的产物,但是完全够教材用,存在的很多局限性,大多数大学生可能也没有太多的感觉。

VC2010 实际上指的是 VC++ 2010 Express 的这种奇奇怪怪的版本,免费,而且轻量,支持的标准也比 VC6 更新,但是也不支持 c++11,但是这个环境已经是目前国家计算机二级等级考试的标准环境,所以,使用 VC6 是真的**。

devcpp 用更老版本的虽然少见,但是确实还是存在的,主流还是 devcpp 5.11 比如我现在就读的这个学校。实际上devcpp 在相当一定的程度上还可以勉强跟上时代的潮流。

当然,通过更换编译Compiler器也可以达到这个效果,不过,和老师的环境不太一样,就没有什么需要考虑的了。devcpp 5.11 支持 c++11,不过需要自己手动开启设置 启用 c++11 或者启动编译器选项 -std=c++11

这里理应需要一张图通过直接勾选启用c++11,但是还没有配置对应环境

![]()

这里应该有一张如何通过编译器选项设置c++11的图片,也没有环境

![]()

code::blocks 可以自动根据系统中的编译器自动配置环境,但是由于官网有一个默认的带有 MinGW 的版本,所以以下的所有内容,也以此为“标准”

实际上 devcpp 和 code::blocks 所使用的编译器都是基于同一个编译器所产生的不同分支,也就是说,同一个妈生的,从使用上,除了 IDE 本身的差别,不会有太多的问题

报错

第一步,当然也是最重要的一步,前面那个只是前言,不看也罢,教不了什么东西

如何看自己的报错

如果你在使用 VS 之流的 IDE,你可以看到它的C++ 报错是有中文的,这个时候可以很方便地看到自己的错误,具体内容是什么意思,但是熟练了,其实看什么都差不多。

一个报错通常会标识一个错误的位置,引发了什么样的错误

部分 ide 提供了双击跳转到错误代码的功能,这个很实用

通常报错总是会由前面的某一个错误,引发一个连锁反应

(关于 C++ 使用到了模板的话,一个报错可能就是几百上千行,此时中间一堆都不用管,直接看到最前面的错误原因就行了)

当程序中存在游离的字符,中文或者是空白字符,通常来说总是后面的问题,因为看到了中文的字符谁不知道它有问题呢,总是一些看不到的符号引发着奇奇怪怪的错误。

又比如函数参数Parameter啊,返回值啊等等等等

undefined reference: 未定义的引用ref,通常是因为include了某个头文件,但是却没有添加对应的源文件或者是库文件,导致函数定义不存在。

不对应的括号,花括号

错误的名称

逗号,分号,中文标点符号

警告

没事,既然只是警告,没有遇到奇葩的问题,就不用管了,

通常是一些什么变量没有使用啊,存在隐式转换什么的,特别奇怪

理解编译的过程


#include <stdio.h>

int main (int argc, char **argv) {

    printf ("Hello World!");

    return 0;

}

这是一个基本的 c 程序,包含了一个宏用于引用别的头文件

main 作为一个入口函数,在程序启动的时候调用

int 是这个函数的返回值,c 标准中没有要求 main 必须返回,或者返回什么

int argc, char**argv 是这个程序启动时输入的参数,你可能操作过类似于,在命令行Command-line使用的工具,比如 git 工具,使用 git clone xxx 可以从远端Origin克隆Clone一个项目,每一个参数如何分割是由终端Terminal决定的(毕竟万一不支持字符串什么的,也可能是一些问题呢)

printf ("Hello World!"); 是一个调用了标准格式化输出函数,输出字符串的语句,会在你的终端上显示出 Hello World! 这些字符。所谓终端就是你所看到的黑色的窗口,

print 打印

f format 格式化

printf 格式化输出,标准库提供的,所以又叫标准格式化输出函数

scanf sscanf sprintf... 同理

return 0; 返回值,一般 0 为正常结束,非 0 则表示程序出现了异常,在 Windows Command 下,你可以通过打印 %ERRORLEVEL% 的值显示程序返回值(这个内容不是很属于今天要教的内容


$ gcc -o mytest.exe mytest.c -Wall

我们使用如上的命令进行对代码的编译,产生如下的编译结果


$ ./mytest

Hello World!

但实际使用中,使用的更多的还是 make 来进行对项目的构建,make 配置文件Profile通常会由 IDE 进行创建,例如上面提到的,但是 vs 的 make 文件就,比较有特色

预编译、预处理

这个部分将宏进行展开,删除注释

语法检查

检查括号啊,参数类型啊等等等等

语义检查

分析、替换、编译、优化

这部分应该去看一些关于编译原理的书,例如《编译原理》

链接

头文件,库文件,静态链接库动态链接库

标准库为什么没有要我们链接库

因为这个库在系统的内部被提供了

大多数操作系统Operating System都会内置一个 c/c++ 的动态链接库给程序链接,实现标准的功能

不同系统的 C++ 标准库在哪

libstdc++.so

什么的

配置链接

-l

-L

编译器选项

-o

-g

-s

-O2

-O3

-O4

构建一个项目

C/C++ 作为一个复杂的工程语言,当然,不是说语法上的复杂,说的是项目之间协作,调库,编译,跨平台编译,使之能够运行是非常复杂的。大家通常使用 makefile 来解决复杂的命令,但是和 .bat .sh 文件来说可能,更加方便令人懂。但是,不同的编译器可能拥有不同的 makefile 语法,然后,很多跨平台跨编译器的项目就需要为这些事情做一些特化,比如附带了一堆的 makefile ,这个通常为实际上的开发产生了相当多的麻烦,因为你需要熟练掌握相当多的 makefile 的语法。然后,cmake 横空出世,通过统一的语法配置了项目,但是 cmake 本身不是直接被编译器所使用的,而是生成了对应编译器的 makefile,然后调用对应编译器对源文件进行编译。但是我觉得 cmake 的语法还是挺操蛋的,非常的不好。有人说 ninja?但是我也觉得只是一般般,然后我现在用的是 xmake,简单的配置就可以为一个项目创建基本的构建工程

参考

C 语言为什么只需要 include 就能使用里面声明的函数?

C/C++ 框架推荐

这个页面中的内容与 https://zh.cppreference.com/w/cpp/links/libs 十分相似,但是按照我自己的想法添加或移动了内容

项目构建

xmake

cmake

nmake

ninja

MakeFiles

多线程库

网络Network

POCO

文本处理库

编码类型转换

格式化库

图像处理

Boost.PIL

Cario

音频处理

OpenAL

多媒体

SDL

EGE

EASYX

XEGE-SDL

tinyproxy 的部署和使用不完全指北

tinyproxy - GitHub

介绍

  • Tinyproxy 是一个面向 POSIX 系统开发的轻量级的开源 HTTP/HTTPS 代理守护进程Progress,其设计目标是快而小,从底层开始进行设计,保证了在高速的同时体积依然很小。它适用于需要完整 HTTP 代理特性,但系统资源又不足以运行大型代理的场景,比如嵌入式部署。

  • Tinyproxy 对小规模网络Network非常有用,这样的场合下大型代理会使系统资源紧张,或有安全风险。 Tinyproxy 的一个关键特性是其缓冲连接的理念。从效果上看, Tinyproxy服务Services器的响应进行了高速缓冲,然后按照客户端能够处理的最高速度进行响应。该特性极大的降低了网络延滞带来的问题。

  • 支持匿名模式:

    • 可让您配置哪些 HTTP标头可被允许通过,哪些 HTTP标头应被阻止。 这使您既可以限制从HTTP服务器向Web浏览器发送的数据(例如Cookie),也可以限制从Web浏览器到HTTP服务器发送的数据(例如版本信息)。
  • 支持 HTTPS:

    • 可以通过 CONNECT 请求Request来转发 HTTPS 连接。Tinyproxy 允许进行 HTTPS 连接的转发,而且无需通过 CONNECT 方法以任何形式修改流量内容(请参阅ConnectPort 指令)。

    • 使用 AddHeader 指令,您可以向传出的流量里添加或插入 HTTP 标头信息。
  • 远程监视:

    • 通过使用远程监视工具,您可以远程获知代理统计信息、日志和访问信息,从而确切了解代理的繁忙程度。
  • 负载监视:

    • 可配置成当负载达到某个程度时,拒绝新的代理请求。
  • 访问控制:

    • 可设置特定的 IP 地址或者 IP 段才可访问。
  • 安全:

    • 不需要 root 权限。

    • 只需进行一些配置(比如,将 Tinyproxy 创建的文件设为由非 root 用户拥有,并让它在大于 1024 的端口上运行),就能让 Tinyproxy 在没有任何特殊权限的情况下运行,从而将系统受到破坏的风险降至最低。

    • 您可以配置 Tinyproxy 来实现 访问控制,从而仅允许来自特定子网或特定接口Interface的请求,从而确保那些随机Random出现的、未经授权的人不能使用您的代理。
  • 轻量化:

    • 只需要极小的系统资源。

    • Tinyproxy 的体积很小,也仅需少量系统资源。在使用 glibc 时,内存占用一般大约 2 MB,而 CPU 占用会随着连接数量线性增长(具体取决于连接速度)。因此,Tinyproxy 可用在比较老旧的计算机上,或者用在基于 Linux 的路由器等网络设备上,而不会对设备性能造成明显的影响。
  • 支持基于 URL 的过滤。

  • 支持透明代理

    • 使客户端无需进行任何配置即可使用代理。您也可以将其用作您网站的反向代理前端。
  • 支持多级代理。

  • 开源:

    • Tinyproxy 采用 GNU GPL 协议(版本2及以上)分发。
  • 易于构建:

    • Tinyproxy 的构建和运行仅需一个最小化的 POSIX 环境。同时,它可以用其他附加库来添加额外功能。
  • 稳定:

    • 它的设计致力于防止缓冲区溢出。代码结构的简单也确保了此类bug易于定位。
  • 高自由度:

    • 如果您要构建自定义Web代理,可以轻松地修改 Tinyproxy 以满足您的自定义需求。 源码结构非常简单,遵循 KISS 原则。 因此,可以把它作为基础Base,来实现您可能需要Web代理执行的任何操作。

安装

直接安装

通过下面的命令在不同平台上直接安装 tinyproxy 服务

[RHEL](Red Hat Enterprise Linux) / CentOS / Fedora


yum install tinyproxy

从 EPEL 仓库Repository中安装 Tinyproxy。

Debian / Ubuntu


apt install tinyproxy

Archlinux / manjaro


pacman -S tinyproxy

openSUSE


zypper in tinyproxy

FreeBSD,OpenBSD 或 NetBSD

可以使用 pkg_add 程序来安装


pkg install tinyproxy

Mac OS

对于 Mac OS X 用户,可以查看 MacPorts 来检查其中的 Tinyproxy 端口是否已是最新版本。

如果您觉得您操作系统Operating System中的 Tinyproxy 二进制软件包不是最新的,请联系该操作系统的软件包维护者。 如果这行不通,您也可以从源代码编译Compiler得到最新的稳定版本。


homebrew install proxy

手动安装

最新版下载链接:

https://github.com/tinyproxy/tinyproxy/releases/latest

编译安装

我们以源代码的形式分发 Tinyproxy,必须在对其编译后,才能在您的系统上使用。 请查看源代码树中的 INSTALL 文件,获取构建说明。 Tinyproxy 的最新稳定发行版Distribution本是 tinyproxy-1.8.4.tar.bz2, 它发布于2016年1月1日。Tinyproxy 1.8.4 的 NEWS 文件包含了发行说明。您可以使用其PGP签名验证tarball。 您也可以浏览 Tinyproxy 旧的发行版本。

通过

我们使用 Git 作为 Tinyproxy 源代码仓库的版本控制系统。 要获取 Tinyproxy 仓库的副本,请使用以下命令:


git clone --depth=1 git@github.com:tinyproxy/tinyproxy.git

下载最新版本代码 (当然,可能是实验性代码,建议还是从上面的链接手动下载最新版 release 代码)

如果你使用的是其它平台,更多的安装方式可直接参考官方文档:https://tinyproxy.github.io/

  1. 通过源码安装

如果你使用的平台,官方还不支持通过软件包安装。你也可以通过源码进行编译安装。


git clone --depth=1 https://github.com/tinyproxy/tinyproxy.git

cd tinyproxy

./autogen.sh

./configure

make

make install

配置

TinyProxy 默认配置文件Profile路径为 /etc/tinyproxy/tinyproxy.conf。如果你要自定义配置文件位置,可以在启动 TinyProxy 时 通过 -c 参数Parameter来指定。

该页面描述配置文件的语法和内容。

Tinyproxy 配置文件包含很多键值对,每行一对。以 # 开头的行或者空白行是注释,会被忽略。关键字不区分大小写,但值内容会区分大小写。如果值内容里包含空格,可以将他们括在双引号"中。可用的关键字及其描述如下:

快速查看当前配置文件


cat /etc/tinyproxy/tinyproxy.conf | grep -v '#' | grep -v '^$'

打开配置文件


vim /etc/tinyproxy/tinyproxy.conf

下面我们来看下几个主要的配置参数:

|变量|默认值|解释|

|-|-|-|

|User|tinyproxy|指定运行 TinyProxy 的用户。可以填用户名或UID。|

|Group|tinyproxy|指定运行 TinyProxy 的用户组。可以填用户名或UID。|

|Port|8888|指定 TinyProxy 的监听端口。Tinyproxy服务将侦听的端口。如果端口小于 1024,则需要以 root 用户的身份启动 Tinyproxy 进程。|

|Listen|空|指定 TinyProxy 绑定的网卡接口,默认是绑定到所有可用的网卡接口的。如需绑定到指定网卡接口,只需去掉对应的注释并指定网卡对应 IP 地址即可。在默认情况下,Tinyproxy 会侦听在所有可用接口上的连接(即,侦听地址 0.0.0.0)。通过配置此参数,Tinyproxy 可以被告知仅侦听一个特定地址。|

|Allow|127.0.0.1|指定可访问 TinyProxy 设备的 IP 或网段,默认仅允许本机访问。如果你想允许所有人使用该代理,注释 Allow 选项即可。如果你想增加多个可访问的网段,可以用多个 Allow 选项同时定义不同网段即可。|

|Bind||这允许您指定 Tinyproxy 将绑定到哪个目标地址,以将其连接到Web服务器或上游代理。|

|BindSame|空|在多网卡的情况下,设置出口 IP 是否与入口 IP 相同。默认情况下是关闭的。
例如:服务器上存在 IP 1.2.3.4,当你请求该 IP 对应的 Tinyproxy 代理时,也通过 1.2.3.4 做为出口访问目标网站。如果此布尔值选项被设置为 Yes,Tinyproxy 会将目标地址设定为触发了传出请求的传入连接的IP地址。|

|Timeout|600|Tinyproxy关闭连接之前,允许该连接处于非活动状态的最大秒数。|

|StartServers|10|指定 TinyProxy 初始启动的子进程数量。一般应将其设置为位于 MinSpareServers和 MaxSpareServers 之间的值。|

|MinSpareServers, MaxSpareServers|5, 20|Tinyproxy 始终保留一定数量的空闲子进程,以保证它可以快速处理新传入的客户端请求。 MinSpareServer 和 MaxSpareServers 控制备用进程数的最大值和最小值。即,当备用服务器的数量降至 MinSpareServers以下时,Tinyproxy 将在后台开始创建新的备用进程,而当备用进程的数量超过 MaxSpareServers 时,Tinyproxy 将杀死多余的进程|

|MaxClients|100|设置最大客户端链接数|

|MaxRequestsPerChild||此选项限制一个子进程在终止之前将会处理的最大连接数。 默认值为0,即无限制。此选项是在出现内存泄漏问题时可采取的紧急措施。 在这种情况下,请将 MaxRequestsPerChild 设置为例如1000 或 10000,可能会有用。|

|Upstream,No Upstream||该选项允许您设置一组基于所访问站点主机Host或域的规则,来选择是否使用某些上游代理服务器。这些规则按照在配置文件中录入的顺序存储,并且在使用时 最后一条 所匹配的规则会生效。有以下三种指定上游主机的方式:

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地址/掩码
|

|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。|

|XTinyproxy||将此选项设置为Yes将通知Tinyproxy将包含客户端IP地址的标头X-Tinyproxy添加到请求中。|

进阶选项

|||

|-|-|

|Filter|/etc/ tinyproxy/ filter|指定设置过滤内容文件的位置|

|FilterURLs|Off/On|设置使用 URL 或是域名方式进行过滤,默认是基于 URL 方式过滤的。域名过滤只检查域名段,URL 过滤则检查整个 URL。|

|FilterExtended|Off/On|设置使用 POSIX 基本或者扩展的正则表达式来匹配过滤规则,默认为使用基本的|

|FilterCaseSensitive|Off/On|设置是否使用区分大小写的正则表达式,默认为不区分大小写。|

|FilterDefaultDeny|Yes/No|设置默认过滤策略。如果将该指令注释掉或设为 No,过滤规则为禁止访问规则。该值默认为 Yes,过滤规则为只允许访问过滤文件中的地址。
过滤规则配置示例:

1. 在 /etc/tinyproxy/filter 文件中添加代理允许或拒绝的域名地址。

hi-linux.com
过滤文件中的域名地址也是支持正则表达式的。

\.google\.com$</br>^hi-linux\.com$
2. 仅允许代理请求 hi-linux.com 的内容,配置如下:

Filter "/etc/tinyproxy/filter"
FilterURLs On
FilterDefaultDeny Yes
3. 仅允许代理请求除 hi-linux.com 域名以外的内容,
置如下:

Filter "/etc/tinyproxy/filter"
FilterURLs On
FilterDefaultDeny No
|

|DefaultErrorFile|"/usr/share/ tinyproxy/ default.html"|该选项控制如果发生未配置的错误时,返回的HTML模板文件。|

|ErrorFile||该选项控制 Tinyproxy 如果遇到特定的HTTP错误时,会返回哪个HTML文件。它包含两个参数,错误号、HTML错误文件的路径。|

|StatHost||该选项配置被当作统计主机的主机名或者IP地址:每当收到对该主机的请求时,Tinyproxy 会返回内部统计信息页面,而不会将请求转发给该主机。此页面的模板可以使用 StatFile 配置项进行配置。StatHost 的默认值为 tinyproxy.stats。|

|StatFile|"/usr/share/ tinyproxy/ stats.html"|该选项配置 Tinyproxy 在收到对统计主机的请求时发送的HTML文件。如果未设置此选项,Tinyproxy 将返回一个硬编码的基本统计信息页面。有关详细信息,请参见 tinyproxy(8) 手册页中的 STATHOST 部分。需要注意的是,使用StatFile 以及 ErrorFile 和 DefaultErrorFile 选项配置的错误文件都是模板文件,其中可以包含一些模板变量,并由 Tinyproxy 在发送时进行扩展。例如,"{cause}" 表示简短的错误描述,"{detail}"表示详细的错误消息。tinyproxy(8) 手册页包含所有模板变量的描述。|

|LogLevel|Info|设置日志级别。高于或等于该设置项级别的日志消息会被记录。例如,如果LogLevel设为 Warning,则从Warning到Critical级别的所有日志消息会被输出,但Notice或更低等级的日志消息会被过滤掉。允许的取值如下:

Critical(最简洁)
Error
Warning
Notice
Connect(不包含Info的连接日志)
Info(最详细)|

|LogFile|/var/log/ tinyproxy/ tinyproxy.log|指定日志文件位置。该选项控制 Tinyproxy 将调试输出写入文件的位置。 此外,Tinyproxy 可以将日志输出到syslog - 请参阅 Syslog 选项。|

|Syslog|Off/On|指定 TinyProxy 是否开启 Syslog 来记录日志
注:Logfile 和 Syslog 只能同时启用一个。如果两个都不启用的话 TinyProxy 会将日志直接输出到终端Terminal的标准输出。当设为 On 时,此选项告知 Tinyproxy 将其调试消息写入syslog,而不是写入由 LogFile 所配置的日志文件。这两个选项是互斥的。|

|PidFile|/var/run/ tinyproxy/ tinyproxy.pid|指定 Pid 文件位置, 在 PidFile 文件不存在时会运行失败。该选项控制 Tinyproxy 主进程将其进程 ID 号存入的文件路径,用于处理信号。|

|DisableViaHeader|关闭|指定是否在 Header 中显示 Tinyproxy 相关信息,默认是关闭的。如果开启将不会在 Header 中显示 Tinyproxy 相关信息,相当于 Tinyproxy 是隐身模式|

|AddHeader||配置一个或多个 HTTP 请求标头,用于添加到由 Tinyproxy 发出的 HTTP 请求中。 需要注意的是,此选项不适用于 HTTPS 流量,因为 Tinyproxy 无法控制要交换的标头。
AddHeader "X-My-Header" "Powered by Tinyproxy"|

|ViaProxyName|"tinyproxy"|RFC 2616 要求代理将 Via 标头添加到 HTTP 请求中,但使用真实主机名可能会引起安全问题。 如果设置了 ViaProxyName 选项,其字符串值将用作 Via 标头中的主机名。 否则,将使用服务器的主机名。|

|DisableViaHeader|No/Yes|该选项设置为 yes 时,Tinyproxy 不会将 Via 标头添加到请求中。 这实际上就使 Tinyproxy 进入了隐身模式。请注意,RFC 2616 要求代理设置 Via 头,因此启用此选项会破坏合规性。 除非您知道自己在做什么,否则不要禁用 Via 标头...|

|Filter||Tinyproxy 支持基于 URL 或域的网站过滤。 此选项指定包含过滤规则的文件的位置,每行一条规则。|

|FilterURLs||如果此布尔选项设置为 Yes 或 On,则根据 URL 执行过滤,而不根据域执行过滤。默认设置为根据域进行过滤。|

|FilterExtended||如果此布尔选项设置为 Yes,则扩展的 POSIX 正则表达式将用来匹配过滤器规则。默认使用基本 POSIX 正则表达式。|

|FilterCaseSensitive||如果此布尔选项设置为 Yes,则过滤器规则匹配时会区分大小写。 默认匹配时不区分大小写。|

|FilterDefaultDeny||默认的过滤策略会允许所有与过滤规则不匹配的内容。 将 FilterDefaultDeny 设置为 Yes 会更改该策略,从而拒绝在过滤规则所匹配的域或URL之外的任何内容。|

|Anonymous||如果设置了 Anonymous 选项,则启用匿名代理。由 Anonymous 配置的标头被允许通过,其他标头会被拒绝。 如果未配置 Anonymous 选项,则允许所有标头通过。您必须给标头内容加上引号。
大多数站点都需要启用 cookie 才能正常工作,因此,如果您访问这种站点,需要允许 cookie 通过。
用法举例:

Anonymous "Host"
Anonymous "Authorization"
Anonymous "Cookie"|

|ConnectPort|443,563|此选项用于指定 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(也就是终端用户在其浏览器中键入的地址)。如果未设置此选项,则不会修改重定向。|

运行和测试

  • 运行 TinyProxy 非常简单,使用官方提供的脚本Script即可。

# 启动 TinyProxy

service tinyproxy start

# 停止 TinyProxy

service tinyproxy stop

# 重启 TinyProxy

service tinyproxy restart
  • 如果服务器有启用防火墙,记得开放相应的 TinyProxy 端口

iptables -I INPUT -p tcp –dport 8888 -j ACCEPT
  • 测试代理是否正常工作

使用curl命令测试代理服务器是否生效


curl url --proxy <代理服务器域名或 IP>:<监听端口>

如果是https代理加 -k 参数


curl url --proxy <代理服务器域名或 IP>:<监听端口> -k

例如


curl url --proxy 8.8.8.8:8888

或使用 telnet 命令


telent <代理服务器域名或 IP> 8888
  • 查看 TinyProxy 请求日志

tail -f /var/log/tinyproxy/tinyproxy.log

FAQ

time out(超时)可能是因为服务器的防火墙没有打开这个端口

Ubuntu 防火墙操作看[这篇]()

连接上了但是被 reject(拒绝)了可能是因为 tinyproxy 没有允许你正在使用的这台电脑或是服务器的 ip

firewall-cmd --add-port=8888/tcp --permanent

firewall-cmd --reload

uwp

iptables

支持

您可以随时通过 github issues 来报告新 bug,或提出功能建议。

Tinyproxy 的开发者们也会浏览在 irc.freenode.net 上的 #tinyproxy 标签Tag

实践

[如何连接代理服务器]()

qqbot 代理文件服务下载

代理访问掩藏真实 ip

参考

https://tinyproxy.github.io/

https://github.com/tinyproxy/tinyproxy

https://www.cnblogs.com/daoyi/p/bu-shutinyproxy-tou-ming-dai-li-fu-wu.html

https://blog.csdn.net/testcs_dn/article/details/89335426

https://java-er.com/blog/tinyproxy-install/

https://www.cnblogs.com/masako/p/11459496.html

https://cloud.tencent.com/developer/article/1475747

https://www.jianshu.com/p/cfef3e491b52

https://www.jianshu.com/p/0f8ac701748d

https://www.cnblogs.com/masako/p/11459496.html

https://zhuanlan.zhihu.com/p/72903589