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
(这也可以在后端完成,但我想保持后端尽可能干净 - 出于某种原因)
感谢大家的热心帮助!
我正在与 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
(这也可以在后端完成,但我想保持后端尽可能干净 - 出于某种原因)
感谢大家的热心帮助!