我和Tomcat 6 (在CentOS 7.6上)的HAproxy 2 (在CentOS 7.7上)有很大的争执,也许有人能帮助我。
我想让我的用户在网页浏览器上放一些东西,如 http:/myapp.mydomain.com。 这将解决HAProxy IP,它将被带到并转发到 http:/TomcatIP:Portsomepathtofile。 我知道有其他方法可以在不涉及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服务器的访问日志上看到的内容。
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
正如你所知道的,问题是,代理向服务器发出的每一个请求都会附加myapppathtofile部分,所以服务器找不到文件。我想重定向到myapppathtofile,只有第一次请求,当客户端进入到 http:/myapp.mydomain.com。
再次感谢
我找到了一个解决方法,我没有重写(set-path),而是用重定向的方式,并这样改变前端。
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
(这也可以在后端做,但我想尽可能保持后端干净,出于某些原因)
谢谢大家的热心帮助!