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

我试图让开发者/testing者访问HAProxy后面的特定服务器,以方便testing。 我们现在这样做的方式是直接访问服务器的主机名(例如server1.mywebsite.com),但我们已经看到了与虚拟主机,SSL等有关的差异…我想设置一个cookie或一个查询string参数或东西,所以我可以强制服务器被使用…

像www.mywebsite.com(与cookie super_secret_cookie = server1)或www.mywebsite.com?super_secret_key=server1

要清楚的是,这将被内部用户使用,而不是普通的公众。

想法?

编辑:我正在使用版本1.3.12

我想你的问题已经过时了,但是对于那些后来的人来说,我是怎么做到的:

我们定义一些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 

这是很好的,并检查只是为了确保它实际上工作..

你不必要的复杂的事情。 如果你有“与虚拟主机,SSL等有关的差异”,那么修复这些。 当你用cookies和查询string参数来启动bodgy时(你是否要修改你的应用程序来坚持查询stringarg通过每个请求? 复杂的…),你只是让事情更复杂,这意味着更难debugging,更可能的是,它会被一个无关的变化意外打破,一般来说,你只是让自己其他人生活困难。

所以,退后一步,而不是询问如何实现一个你已经提出的解决scheme,问一个关于如何解决你的问题的问题 。 “我们有一个haproxy,想直接访问机器,但是当我们这样做,我们得到( 描述与虚拟主机的区别 )”。

我对你的虚拟主机问题的猜测是,他们没有设置为直接接受机器的名字,这是微不足道的修复 – server_name (或一个新的ServerAlias )额外的条目可以让你远离那里。 对于SSL来说,如果你不使用通配符证书,那么这是一个麻烦的技巧,但是因为它只是内部用户,忽略SSL警告是一个(半)有效的解决scheme – 或者你可以运行一个单独的SSL证书对于每台机器的东西(在一个内部的CA)。 如果您在负载平衡器上终止SSL,请停止执行此操作 。