haproxy NOSRV 问题与重定向端口

5 configuration haproxy

我试图在一个端口 (8080) 上捕获 http 流量并将其重定向到一个内部端口 (12345)。我的 haproxy.cfg 中有以下内容

frontend rest_front
   bind *:8080
   #reqadd X-Forwarded-Proto:\ http
   #reqadd X-Forwarded-Port:\ 12345

   acl host_rest hdr(host) -i mypublicserver.myhost.com

   stats uri /haproxy?stats
   acl url_blog path_beg /blog

   # figure out which one to use
   use_backend rest_cluster if host_rest

backend rest_cluster
   server rest_server_host myinternalserver.myotherhost.com:12345 check
Run Code Online (Sandbox Code Playgroud)

当我测试与 mypublicserver.myhost.com 的连接时,我在日志文件中看到以下内容...

Aug 10 14:18:35 myproxy haproxy[30258]: <IP_ADDRESS>:56779 [10/Aug/2017:14:18:35.309] rest_front rest_front/<NOSRV> -1/-1/-1/-1/2 503 213 - - SC-- 1/0/0/0/0 0/0 "GET /somepage.html HTTP/1.1"
Run Code Online (Sandbox Code Playgroud)

我不明白为什么后端没有被击中。我使用的 URL 是http://mypublicserver.myhost.com:8080/somepage.html,它应该触发 acl。

Mo3*_*m3n 6

没有使用的默认后端rest_cluster只使用时host_rest ACL是有效的。
因此,任何 HOST 标头与“mypublicserver.myhost.com”不匹配的请求都不会路由到任何后端,这会导致 503 错误。
因此,您可以添加default_backend指令或删除/编辑 ACL。

编辑:如果 ACL 不匹配,这是因为它缺少端口部分:8080
尝试:

 acl host_rest hdr(host) -i mypublicserver.myhost.com:8080