Tomcat 6在HAproxy 2后面,只显示一个白页

Tomcat 6 behind HAproxy 2, show only a white page

我正在与 HAproxy 2(在 CentOS 7.7 上)后面的 Tomcat 6(在 CentOS 7.6 上)打架,也许有人可以帮助我。

我希望我的用户在 Web 浏览器上放置类似 http://myapp.mydomain.com this will resolve HAProxy IP, where it will be taken and forwarded to http://TomcatIP:Port/some/path/tofile 的东西(后端的单个服务器,还没有平衡)。 它似乎配置正确,因为当我在网络浏览器上放置简单的 URL 时,出现了 myapp 的图标和标题,但页面的其余部分保持空白(白色,上面没有任何内容,没有错误,没有)。 我知道还有其他方法可以在不涉及 HAProxy 的情况下完成此操作,但这是概念证明,开始将其用作更多站点的前端并使用负载平衡。

这是我的 HAProxy.cfg:

 #  HAProxy  configuration file   #

 global
     maxconn 5000
     log /dev/log local0
     user haproxy
     group haproxy

defaults
     log global
     mode http
     option  log-health-checks
     option  log-separate-errors
     option  dontlog-normal
     option  dontlognull
     option httplog
     option  socket-stats
     retries 5
     maxconn 5000
     option redispatch


#             Front-ends            #

frontend MY_APP
     bind IP:80
     acl is_myapp hdr(Host) -i myapp.mydomain.com
     use_backend backend_myapp if is_myapp

 #           Back-ends               #

 backend backend_myapp
         http-request set-path /myapp/path/tofile
         server myapp IP:Port cookie myapp check

不知道从这里去哪里,任何帮助将不胜感激。 对不起,如果我的英语水平不够!

添加一些信息:

我继续打开 haproxy 日志,当代理去服务器寻找不同的组件时,在初始连接后发现一堆 404 行(这是唯一有 200 OK 的行)页。我将粘贴一些行以便您可以看到:

May  7 17:57:43 localhost haproxy[6642]: 192.168.18.175:58170 [07/May/2020:17:57:43.502] myapp backend_myapp/myapp 5/0/2/3/10 200 3039 - - ---- 1/1/0/0/0 0/0 "GET / HTTP/1.1"
May  7 17:57:43 localhost haproxy[6642]: 192.168.18.175:58170 [07/May/2020:17:57:43.513] myapp backend_myapp/myapp 198/0/2/3/203 404 1269 - - ---- 1/1/0/0/0 0/0 "GET /myapp/static/Shared/ext/resources/css/ext-all.css?144580 HTTP/1.1"
May  7 17:57:43 localhost haproxy[6642]: 192.168.18.175:58171 [07/May/2020:17:57:43.862] myapp backend_myapp/myapp 2/0/1/3/6 404 1231 - - ---- 6/6/1/1/0 0/0 "GET /myapp/static/gxui/gxui-all.css?188160 HTTP/1.1"
May  7 17:57:43 localhost haproxy[6642]: 192.168.18.175:58172 [07/May/2020:17:57:43.862] myapp backend_myapp/myapp 3/0/1/3/7 404 1275 - - ---- 6/6/2/2/0 0/0 "GET /myapp/static/Resources/Spanish/WorkWithPlusTheme.css?1848857 HTTP/1.1"
May  7 17:57:43 localhost haproxy[6642]: 192.168.18.175:58175 [07/May/2020:17:57:43.865] myapp backend_myapp/myapp 5/0/1/4/10 404 1223 - - ---- 6/6/2/2/0 0/0 "GET /myapp/static/gxtimezone.js?70721 HTTP/1.1"
May  7 17:57:43 localhost haproxy[6642]: 192.168.18.175:58174 [07/May/2020:17:57:43.862] myapp backend_myapp/myapp 6/0/2/4/12 404 1279 - - ---- 6/6/1/1/0 0/0 "GET /myapp/static/scaMessage/css/jquery.pnotify.default.css?16960 HTTP/1.1"
May  7 17:57:43 localhost haproxy[6642]: 192.168.18.175:58173 [07/May/2020:17:57:43.863] myapp backend_myapp/myapp 6/0/1/6/13 404 1253 - - ---- 6/6/0/0/0 0/0 "GET /myapp/static/scaMessage/css/jquery-ui.css?16960 HTTP/1.1"

这是我在 tomcat 服务器上看到的 access-log:

10.2.0.40 [07/May/2020:19:55:15 -0300] GET /myapp/path/tofilemyapp/static/gxcfg.js?70721 HTTP/1.1 404 1043 51E30637266E0CBD1A2488F384378CE6 http-8080-17 1
10.2.0.40 [07/May/2020:19:55:15 -0300] GET /myapp/path/tofilemyapp/static/Shared/ext/adapter/ext/ext-base.js HTTP/1.1 404 1095 51E30637266E0CBD1A2488F384378CE6 http-8080-17 2
10.2.0.40 [07/May/2020:19:55:15 -0300] GET /myapp/path/tofilemyapp/static/Shared/ext/ext-all.js HTTP/1.1 404 1069 51E30637266E0CBD1A2488F384378CE6 http-8080-17 1
10.2.0.40 [07/May/2020:19:55:17 -0300] GET /myapp/path/tofilemyapp/static/gxui/gxui-all.js HTTP/1.1 404 1059 51E30637266E0CBD1A2488F384378CE6 http-8080-17 1
10.2.0.40 [07/May/2020:19:55:17 -0300] GET /myapp/path/tofilemyapp/static/messages.spa.js?70721 HTTP/1.1 404 1057 51E30637266E0CBD1A2488F384378CE6 http-8080-17 1
10.2.0.40 [07/May/2020:19:55:17 -0300] GET /myapp/path/tofilemyapp/static/login.js?2019112512435781 HTTP/1.1 404 1043 51E30637266E0CBD1A2488F384378CE6 http-8080-17 1
10.2.0.40 [07/May/2020:19:55:17 -0300] GET /myapp/path/tofilemyapp/static/Shared/jquery/jquery-1.4.2.min.js HTTP/1.1 404 1093 51E30637266E0CBD1A2488F384378CE6 http-8080-17 1

如您所知,问题在于,对于代理向服务器发出的每个请求,它都会附加 /myapp/path/tofile 部分,因此服务器找不到文件。 有没有办法来解决这个问题?我想重定向到 /myapp/path/tofile 只有第一个请求,当客户端进入 http://myapp.mydomain.com

再次感谢

我找到了一种绕过它的方法,而不是重写(设置路径),我进行了重定向,并以这种方式更改了前端:

frontend myapp *:80
        acl is_gesa hdr(Host) -i myapp.mydomain.com
        redirect location /myapp/path/tofile if { path / }
        use_backend backend_myapp if is_myapp

(这也可以在后端完成,但我想保持后端尽可能干净 - 出于某种原因)

感谢大家的热心帮助!