关于HAProxy(1.5.2)和Tomcat(7.0.54),我有几个问题 . 我都是新手 .

在Tomcat中,我有一个应用程序,在登录时(https://my.tomcat.host:8080/access)将用户(通过303代码)重定向到另一个网页(http://my.tomcat.host:8080 /访问/的sessionId = 1234567) . 设置HAProxy我设置前端引擎(my-frontend-https)来接收https请求并将它们发送到后端(my-backend-https) - 然后将其作为http请求发送到tomcat服务器 .

这就是haproxy.cfg(对于my.haproxy.host)的样子:

frontend my-frontend-https
   bind *:8443 ssl crt /my/certs/server.pem
   mode http
   option httplog
   default_backend my-backend-https

backend my-backend-https
  balance roundrobin
  mode http
  option httplog
  option forwardfor
  server my-tomcat-srv my.tomcat.host:8080 check

在发送以下查询(https://my.haproxy.host:8443/access)时,我发现从tomcat返回的Location标志的格式为:http://my.haproxy.host:80 / access / sessionId = 1234567 . 看看tomcat服务器,我发现我必须在server.xml中启用RemoteIPValve类,并将httpsServerPort设置为8443(作为protocolHeaderHttpsValue - 可能不需要这样做,因为它是默认值) . 这似乎有效,我将在后端添加更多服务器 .

所以这似乎很好,但我有几个问题:

  • 我注意到当前端引擎是http而不是https时,问题似乎不存在 . 也就是说,位置字段会回到我期望的状态 . 有任何差异的想法?

  • 如果没有server.xml文件中的设置,tomcat似乎知道我在我的Web浏览器和tomcat之间使用代理 . 怎么知道这个?是否有一个指令被传递给tomcat,它告诉它是一个代理,还是比它更简单 .

  • 如果我想在同一个haproxy.cfg文件中指向同一个tomcat实例的另一个前端/后端引擎(也就是说上面说的是跨多个服务器的负载均衡,包括这个,我想要一个入口点就是这个一个可以做到吗?即haproxy将在其中包含以下行 . frontend my-frontend-https1 bind *:9443 ssl crt /my/certs/server.pem mode http选项httplog default_backend my-backend-https1

后端my-backend-https1 balancer roundrobin模式http选项httplog选项forwardfor服务器my-tomcat-srv my.tomcat.host:8080检查

Location字段是否会返回http://my.haproxy.host:8443/access/sessionId=1234567,因为这是server.xml中定义的内容 . 谢谢

哈罗德 .