正/反向代理与科学上网

代理

你可能听过许多 反向代理(Reverse Proxy) 软件例如 Nginx、Apache 等,它们性能优越,被广泛应用于实际场景中,那么你是否知道 “反向” 是什么意思,为什么叫反向呢,明白这个问题有助于我们更深入的理解它们。还有许多框架中常用的的 控制反转(IOC)/依赖注入(DI) 等概念,你是否理解 反转注入 的真正含义。

既然有反向代理,就有正向代理,常用的科学上网就是使用了这个技术,你所见过的例如 ss/ssr/socks5 等等仅仅是协议名,配合上一些混淆方式,它们的技术原理还是 正向代理( Forward Proxy)

之前我在「刷」面试题的时候,就遇到过相关问题,“墙以及科学上网的原理”。相信读完这本文你会得到答案。

在了解正反向代理之前先牢记一句话,反向代理 代理并 隐藏服务端正向代理与之相反,隐藏客户端

反向代理

OK,记住了这句话,想想 Nginx/Apache 的功能,你将服务部署在服务器上,只公开了 80/443 端口,而内部服务有很多个,通过不同域名访问,然后使用 Nginx/Apache 来接受外界请求,利用提供的指令,例如 sever_namelistenindexlocation 来控制其进行转发到不同的内部端口上,由于其使用了非常高效的 epoll IO多路复用模型,效率非常高。

那么你的脑海中应该有大致这么一张图,类似这样:

                                 Reverse Proxy

                           +------------------------------------------------------+
                           |                                                      |
                           |                                  +---------+         |
                           |                        +-------> | Server1 |         |
                           |                        |         +---------+         |
+--------------+           |   +-----------------+  |                             |
|              |           |   |                 |  |         +---------+         |
|    Client    +-----------+-->|   google.com    +->+-------->| Server2 |         |
|              |           |   |                 |  |         +---------+         |
+--------------+           |   +-----------------+  |           ...               |
                           |                        |         +---------+         |
                           |                        +-------->| Server99|         |
                           |                                  +---------+         |
                           |                                                      |
                           +------------------------------------------------------+

正向代理

与反向代理相反,正向代理的作用是隐藏客户端,比较容易理解的例子还是科学上网,直接访问会受到运营商防火墙的限制例如 DNS 污染等导致查询失败。

而 “梯子”“代理”等等工具就是购买了一台服务器 S,在你需要请求这些受限网站 Google 时,直接请求 S,由于可以访问 S ,就由 S 替我们去访问 Google,再将结果返回给我们,就完成了一次 “科学上网”。

                                        Forward Proxy

+-----------------------------------------------------+
|                                                     |
|                                                     |
|    +--------------+           +---------------+     |             +--------------------+
|    |              |           |               |     |             |                    |
|    |    Client    +---------->|  Proxy Server +---->| ----------->|  Google/GitHub,etc |
|    |              |           |               |     |             |                    |
|    +--------------+           +---------------+     |             +--------------------+
|                                                     |
|                                                     |
+-----------------------------------------------------+

当然,大致过程很简单,但是其中的细节非常多。为了限制网民的这种行为,会对访问境外的流量进行分析,如果有可疑特征,则直接拦截。现在甚至研究出了利用机器学习等技术智能审查流量的机。因此通过 SS/SSR 的方式由于特征明显,已经基本被淘汰。

科学上网



代理

173 Words

2021-05-31 15:33 +0000