分享一个Nginx反向代理的另类应用案例

博客前面分享了一篇《分享一个 Nginx 正向代理的另类应用案例》,时隔不久,身为救火队员、万金油的博主又再一次接到了一个另「W」类「T」需「F」求:

场景和上次有些类似,也是部门引进的第三方应用,部署在各个网络区域,从 OA 办公区域无法直接访问。目前,运营人员都需要登陆 Windows 跳板机,才能打开这些应用的 WEB 控制台。既不方便,而且还有一定 Windows 服务器的维护工作量,于是找到我们团队,希望通过运维手段来解决。

分享一个Nginx反向代理的另类应用案例

拿到这个需求后,我先问了下各个应用的基本情况,得知每个应用的框架基本是一样的,都是通过 IP+端口直接访问,页面 path 也基本一样,没有唯一性。然后拿到了一个应用 WEB 控制台地址看了下,发现 html 引用的地址都是相对路径。

乍一想,这用 Nginx 代理不好弄吧?页面 path 一样,没法根据 location 来反代到不同的后端,只能通过不同 Nginx 端口来区分,那就太麻烦了!每次他们新上一个应用,我们就得多加一个新端口来映射,这种的尾大不掉、绵绵不绝事情坚决不干,Say pass。

再一想,我就想到了上次那个正向代理另类应用方案,感觉可以拿过来改改做动态代理。原理也简单:先和用户约定一个访问形式,比如:

Nginx 代理地址为 myproxy.oa.com,需要代理到 IP 为 192.168.2.100:8080 的控制器,用户需要访问 http://myproxy.oa.com/192.168.2.100:8080/path。

动态代理的原理及实现:

1、Nginx 从$request_uri 变量中,通过斜杠提取第一段作为要反向代理的对象,即 proxy_pass,提取后面的作为需要反代的路径;

2、对于 Html、JS、CSS 等资源引用则需要通过 Nginx 的替换模块,将路径替换为上述约定形式,比如:Html 里面的 href="/js/jquery.min.js",需要替换为 href="http://myproxy.oa.com/192.168.2.100:8080/js/juqery.min.js",即所有资源地址都保证符合代理约定的形式,才能够正确走代理获取。

3、通过代理去访问,查看浏览器开发者工具中的 Network 和 console,找到无法访问的地址,并分析引用的位置,写规则替换掉即可。

4、实际测试发现,他们的应用可能还会有 https 协议(...),而且是伪证书模式,只是开了 https 协议访问。上述设计模式下,https 页面是无法打开的,这里需要兼容 https 后端才行,因此最后的约定形式简单修改为:如果是 http://myproxy.oa.com/https-192.168.2.101:8080/path,即:如果是 https 协议,需要在第一段 path 的 IP 前面加上 https-来区分,而 http 协议则可加可不加。

基本通过上述几步,就完全搞定了,最终 Nginx 规则如下:

Tips:实际调试过程中,可以给 Nginx 集成一个 echo 模块,可以将变量打印出来,方便调试。

最后,在 Nginx 服务器的/html 目录放一个 index.html 导航页面,用户只需要访问代理地址 http://myproxy.oa.com/,就能看到全部的后端节点,点击访问即可,真的不要太爽哦!

不得不再一次感慨,Nginx 真是一个好东西,完美~

发表评论

gravatar

:?::razz::sad::evil::!::smile::oops::grin::eek::shock::???::cool::lol::mad::twisted::roll::wink::idea::arrow::neutral::cry::mrgreen:

刷新评论

目前评论:11   其中:访客  9   博主  2

  1. avatar 本质游戏 2 来自天朝的朋友 QQ浏览器 Windows 10 辽宁省抚顺市 电信

    大哥,你是给我带来好运的人。
    刚打开您的博客评论了一下,就收到百度联盟的授权邮件了。3年了都没有通过。。。
    刚开始做网站的时候就知道您了,3年后又到了您这儿,还给了我一个小惊喜~~

    • avatar 张戈 [博主] 来自天朝的朋友 谷歌浏览器 Mac OS X 10_14_3 广东省深圳市 电信

      :mrgreen: 恭喜你了。

  2. avatar 本质游戏 2 来自天朝的朋友 QQ浏览器 Windows 10 辽宁省抚顺市 电信

    您是我遇到为数不多或者说是仅有折腾wordpress还不卡的人~

    • avatar 张戈 [博主] 来自天朝的朋友 谷歌浏览器 Mac OS X 10_14_3 广东省深圳市 电信

      现在略卡,服务器在国外,用的国外CDN。比之前差很多。

  3. avatar 章郎虫 0 来自天朝的朋友 谷歌浏览器 Windows 10 浙江省宁波市 电信

    博客确实慢了很多,为了换域名代价有点大啊。

  4. avatar Rares 2 来自天朝的朋友 谷歌浏览器 Windows 10 福建省福州市 联通

    有段时间没有来了,不明觉厉,万金油

  5. avatar 吴昊博客 1 来自天朝的朋友 谷歌浏览器 Windows 10 浙江省绍兴市 联通

    这个nginx写的真骚气 :evil: :evil: :evil:

  6. avatar 创业博客 1 来自天朝的朋友 谷歌浏览器 Windows 10 江苏省常州市 电信

    虽然看不太懂,但是文章很精致的

  7. avatar 动平衡仪 1 来自天朝的朋友 谷歌浏览器 Windows 7 江苏省苏州市 电信

    你的博客就是一本万能书

  8. avatar 楚狂人 2 来自天朝的朋友 谷歌浏览器 Windows 10 山东省潍坊市 联通

    解释的很详细,学习了

  9. avatar 奶爸de笔记 1 来自天朝的朋友 谷歌浏览器 Windows 10 重庆市 电信

    好多搞反代的大神。

加载中,请稍候...