Web 技术研究所

我一直坚信着,Web 将会成为未来应用程序的主流

不称职的 nginx 7 层代理负载均衡

  nginx 既然是做 7 层代理那就应该做一些 7 层代理应该做的事。ip_hash 这种级别的东西讲真丢给 4 层代理做就好了。一个 Web 项目识别用户肯定不是通过 IP,因为一个办公室或一个学校可能就是同一个外网 IP。所以将相同的用户分配到同一台服务器这件事的关键在于区分用户。
  sticky 模块可以用于让 nginx 通过 Cookie 来作为 Session 标识符,以识别用户,并且将相同用户的请求转发到相同的机器上,实现一个真正的 7 层代理负载均衡。但是 sticky 模块并不在 nginx 主程序中,需要单独安装,然后重新编译 nginx。这个门槛是比较高的,有些团队害怕重新编译会让整个 nginx 变得不稳定,于是会放弃 nginx 的解决方案。确实 nginx 也并不是唯一一家做 7 层代理的东西。还有更专业的 HAProxy 也同样可以实现基于 Cookie Session 的负载均衡。
  sticky 模块由于没有自带,使用起来确实太麻烦。 tengine 其实有另外一套类似的 session_sticky,它直接包含在 tengine 的主程序中。但是 tengine 的这套东西目前还很不成熟,不信可以翻翻里面的代码,各种奇奇怪怪的东西,所以我并不推荐大家使用。
  结论是 nginx 作为代理服务器虽然名为 7 层代理,但实际上它并不能好好做 7 层代理的事情。我们用 nginx 做代理服务器最多的是为了将 HTTP 头中的 $host 不同的请求分别转发到不同的集群上(当然这也属于 7 层)。如果真需要 Cookie Session 这种级别的负载均衡,也许 HAProxy 会是更好的选择。
网名:
50.16.97.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^