如何直接访问 HAProxy 后面的服务器?

如何直接访问 HAProxy 后面的服务器?

我正在尝试为开发人员/测试人员提供一种访问 HAProxy 后面的特定服务器的方法,以方便测试。我们现在的做法是直接访问服务器的主机名(例如 server1.mywebsite.com),但我们已经看到了与虚拟主机、ssl 等相关的差异……我想设置一个 cookie 或查询字符串参数或其他东西,这样我就可以强制使用服务器……

类似于 www.mywebsite.com (带有 cookie super_secret_cookie=server1) 或 www.mywebsite.com?super_secret_key=server1

需要明确的是,这将由内部用户使用,而不是普通公众。

有想法吗?

编辑:我使用的是 1.3.12 版本

答案1

我想你的问题已经过时了,但是对于后来者来说,我是这样做的:

我们定义一些acl:

frontend http-in
acl has_server1_cookie  hdr_beg(cookie) server1

use_backend single_server1_backend if has_server1_cookie

当然我们必须定义后端:

backend single_server1_backend 
server server1.mywebsite.com 192.168.1.123:80 maxconn 32 check

我们甚至可以在后端部分添加以下内容

reqadd backend:\ server1

这将告诉 haproxy 向发送到 server1 的每个请求添加一个 http 标头

backend: server1

这很好,而且很容易检查,以确保它确实有效。

答案2

你不必要地把事情复杂化了。如果你有“与虚拟主机、ssl 等相关的差异”,那么就修复它们。当你开始用 cookies 和查询字符串参数搞乱事情时(你会修改你的应用程序以在每个请求中保留该查询字符串参数吗?即使更多的复杂化……)你只会让事情变得更加复杂,这意味着更难调试,更有可能被不相关的变化意外破坏,总的来说,你只会让自己的生活变得困难其他所有人。

因此,退一步思考,不要问如何实施你想出的不成熟的解决方案,而是问一个问题如何解决你的问题。“我们有一个 haproxy,想直接访问机器,但是当我们这样做时,我们得到(描述与虚拟主机的区别)”。

我猜想您的 vhosts 问题在于它们没有设置为直接接受机器的名称,这很容易修复 - 一个额外的条目server_name(或一个新的ServerAlias)可以让您摆脱困境。对于 SSL,如果您不使用通配符证书,这会有点棘手,但由于它只是内部用户,因此忽略 SSL 警告是解决问题的(半)有效方法 - 或者您可以为每台机器运行单独的 SSL 证书(在内部 CA 上)。如果您在负载平衡器上终止 SSL,那么别再这样做了

相关内容