nginx proxy

今天玩弄 aliyun ECS 的时候,在远程机上抄了一个 koa 的例子,哈哈,太不专业了。却不知道如何跑起来。就在网上乱搜一通。简单了解了下nginx 代理,下面谈点我的理解,仅仅是自己思考,没什么全面性和系统性。

正向代理

网上的例子。 就拿web访问来说,上谷歌上不去,弄个代理;有时候想隐藏自己的ip,弄个代理。

大概就是 client <-> proxy <-> server,(不管什么路由器,经过了多少网络节点……,只考虑这个三节点)。单看正向代理,第一是关于 client 的事情,不管它能不能直接访问 server,它都可以选择使用 proxy,比如上谷歌,能不能直连,不影响你是否能使用 proxy,或许你仅仅是想隐藏什么。第二关于 proxy ,它的确需要两头都能连通,它要提供功能,当 client 使用了它的时候,发出一个对 server 的请求,这时候你使用的 proxy 就接管了这个请求;至于是否隐藏 client 的IP等信息,就看 proxy 是如何实现的,它是可以把 client 的IP信息发给 server 的。整个流程看起来就是 client 访问了 server。然而,实际,client 只是访问了 proxy 而已;或者 clientproxy 说,请帮我访问下 server

再说一句,连不上谷歌,使用代理服务器,只是正向代理的一个场景。而能连上谷歌,你也可以使用代理服务器,因为你可能想做些私人的事。client 在某种程度上糊弄了 server

反向代理

比如我访问 https://www.aliyun.com/xxhttps://www.aliyun.com/oo (本故事纯属虚构,如有雷同,纯属巧合!)。我本以为是这样的 C <-> S。但是实际情况可能是 C <-> P <-> S1(xx)C <-> P <-> S2(oo) 。其实我访问的是 P,它把不同种类的请求分发给了后面不同的服务器。在 C <-> P 中, 这个 P 作为一个反向代理,糊弄了 C ,让整个流程变成 C <-> P <-->Ss。单看反向代理,就是 P 的事情,它会把请求分发到一堆 Ss;而 C 是不知道的,除非 P 愿意泄露点啥。

代理

然后就变成了 C <-> Pforward <-> Preverse <-> SsC 通过 Pforward 糊弄 PreversePreverse 用了一堆 Ss 反过来也在糊弄 PforwardC 通过 Pforward 以为自己访问了 Preverse,实际 Preverse 却把请求给了 Ss

悲伤

总想表达更清楚点,奈何几乎能一年无话,撞了南墙也不回头。写东西也是把自己绕进去。

实际应用

我在 aliyun ECS,开了 nginx 监听 80 端口,其中 location /hw { proxy_pass http://127.0.0.1/3456; } ,location /danteng { proxy_pass http://127.0.0.1/6543; } ;开了两个 node 应用,一个监听 3456,一个监听 6543。然后 访问 */hw 和 */danteng,就访问了不同的应用,也就是服务吧。