Configuration

HAProxy:use_backend 被忽略,因為後端沒有前端功能

  • March 14, 2016

我有一個正在以程式方式建構的 HAProxy 配置文件,對於定義的每個後端,我都收到如下錯誤:

[WARNING] 073/153725 (1663) : parsing [/etc/haproxy/haproxy.cfg:964] : 'use_backend' ignored because backend 'bk_10716' has no frontend capability.

我的配置文件相當簡單,而且只有一個後端的簡化版本似乎可以工作,所以我無法確定哪裡出了問題。

我的配置文件包含以下內容:

global
   tune.ssl.default-dh-param 2048
   log     127.0.0.1 local1 debug
   chroot  /var/lib/haproxy
   user    haproxy
   group   haproxy
   maxconn 4000
   daemon

defaults
   log     global
   mode    http
   option  httplog
   option  dontlognull
   timeout connect 5000
   timeout client 50000
   timeout server 50000
   errorfile 400 /etc/haproxy/errors/400.http
   errorfile 403 /etc/haproxy/errors/403.http
   errorfile 408 /etc/haproxy/errors/408.http
   errorfile 500 /etc/haproxy/errors/500.http
   errorfile 502 /etc/haproxy/errors/502.http
   errorfile 503 /etc/haproxy/errors/503.http
   errorfile 504 /etc/haproxy/errors/504.http

listen stats
   bind *:1234
   stats auth admin:bdi2016
   stats uri /
   stats realm Haproxy\ Statistics
   stats enable
   mode http

frontend http:
   bind *:80
   mode http
   option httpclose
   option forwardfor

其次是其中的大量:

use_backend bk_10011 if { hdr_end(host) -i somedomainname.com }
   backend bk_10011
       server server_10011   127.0.0.1:10011 check

我只是錯過了一些明顯/愚蠢的東西嗎?

只是一個愚蠢的錯誤。我需要use_backend if在前端而不是在每個單獨的後端之上指定我的所有語句。這就是為什麼它只與一個後端一起工作的原因,因為無論縮進如何,第一個use_backend“屬於”的frontend http:並且每個後續後端都顯得孤立。

您需要為前端分配一個 ID 號(例如 ID 1)。然後,您需要將所述 ID 分配給後端配置以進行匹配。

所以前端應該是這樣的:

frontend http:
id 1
bind *:80
mode http
option httpclose
option forwardfor

在後端像這樣:

use_backend bk_10011 if { hdr_end(host) -i somedomainname.com }
backend bk_10011
   server server_10011   127.0.0.1:10011 id 1 check

至少這對我有用。

引用自:https://serverfault.com/questions/763703