nginx 服务器在我们平常的软件开发中可能还是用到的比较多的,那么有一个问题我们就应该明白,也许让你去实现轻而易举,但说到其中的原理是不是就有点不清楚了。下面就谈谈我自己对正向代理和反向代理的理解:
首先有一个用户 C,三台服务器 S1、S2 和 S3,S1、S2、S3 在同一局域网内互相可访问,但 S1 对外网开放,S2 和 S3 不对外网开放,还有一份数据资源 D,资源 D 放在服务器 S2 和 S3 上。
nginx 正向代理
这时用户 C 明确知道自己想访问的数据资源 D 在服务器 S2 上,用户 C 想要访问这份资源但是没办法直接访问服务器 S2,用户 C 想到服务器 S1 和 S2 在同一局域网并且互相可访问,而自己能够访问服务器 S1,所以用户 C 就通过服务器 S1 去访问服务器 S2 上的资源 D。那么正向代理就是对于用户 C 来说他是明确知道他要访问的数据资源 D 在哪个服务器上;对于服务器 S1 来说他只充当了用户 C 的中间代理角色;而对于服务器 S2 来说他只知道访问他的资源的是服务器 S1,根本不知道用户 C 的存在。
正向代理的整个流程就是用户 C 访问服务器 S2 上的数据资源 D,但是他是通过借助服务器 S1 来进行访问的,服务器 S1 得到数据资源后再返回给用户 C。
nginx 反向代理
还是刚开始上面说的这些基本条件:用户 C,服务器 S1、S2 和 S3,以及服务器 S2 和 S3 上的数据资源 D。这时用户 C 并不知道数据资源 D 在服务器 S2 和 S3 上面,他只知道访问服务器 S1 可以得到自己想要的资源,于是他每次都是直接访问服务器 S1,只不过提供给用户 C 数据资源的都是服务器 S2 或者 S3。那么反向代理就是对于用户 C 来说他是不知道数据资源 D 具体在哪里,也不知道是由谁提供的;对于服务器 S1 来说每次都接收用户的请求,然后再把请求根据调度策略交给提供资源的服务器 S2 或 S3;对于服务器 S2 和 S3 来说同样也都不知道访问这份资源的真实用户是谁,只是和服务器 S1 进行交互。
反向代理的整个流程就是用户 C 访问服务器 S1 获取数据资源 D,服务器 S1 将请求转交给服务器 S2 或 S3,然后得到相应的资源后再返回给用户 C。
总之,正向代理就是客户端知道服务器端,带过代理连接服务器端。而反向代理就是客户端不知道服务器端,通过代理去连接服务器端,具体是由哪个服务器端提供服务取决于代理的调度方式,即 nginx 中的负载均衡策略。以上是我个人的理解,有错误还请指出哈。
励志成为一名菜鸟码农,共勉!
领取专属 10元无门槛券
私享最新 技术干货