Haproxy

前端部分中的 Haproxy 未知關鍵字綁定 *:80

  • August 14, 2020

我使用以下命令從原始碼編譯了 Haproxy LTS 2.2 版本:

make TARGET=linux-glibc USE_PCRE=1 USE_OPENSSL=1 USE_ZLIB=1 USE_CRYPT_H=1 USE_LIBCRYPT=1

編譯過程中沒有錯誤。這是我的 Haproxy 配置:

global
   log         127.0.0.1 local2

   chroot      /var/lib/haproxy
   pidfile     /var/run/haproxy.pid
   maxconn     4000
   user        haproxy
   group       haproxy
   daemon
   
   # turn on stats unix socket
   stats socket /var/lib/haproxy/stats

defaults
   mode                    http
   log                     global
   option                  httplog
   option                  dontlognull
   option http-server-close
   option forwardfor       except 127.0.0.0/8
   option                  redispatch
   retries                 3
   timeout http-request    10s
   timeout queue           1m
   timeout connect         10s
   timeout client          1m
   timeout server          1m
   timeout http-keep-alive 10s
   timeout check           10s
   maxconn                 3000

frontend http-in
       bind 192.168.123.40:80
       acl gerrit hdr(host) -i gerrit.example.local
       acl jenkins hdr(host) -i jenkins.example.local
       use_backend gerrit if gerrit
       use_backend jenkins if jenkins

backend gerrit
       server gerrit 127.0.0.1:8080

backend jenkins
       server jenkins 127.0.0.1:8081

當我使用haproxy -c -q -V -f /etc/haproxy/haproxy.cfg命令檢查配置時,出現以下錯誤:

[NOTICE] 226/130914 (35193) : haproxy version is 2.2.2
[NOTICE] 226/130914 (35193) : path to executable is /usr/sbin/haproxy
[ALERT] 226/130914 (35193) : parsing [/etc/haproxy/haproxy.cfg:33] : unknown keyword 'bind 192.168.123.40:80' in 'frontend' section
[ALERT] 226/130914 (35193) : Error(s) found in configuration file : /etc/haproxy/haproxy.cfg
[ALERT] 226/130914 (35193) : Fatal errors found in configuration.

我檢查了文件,它允許bind在前端部分使用關鍵字 http://cbonte.github.io/haproxy-dconv/2.2/configuration.html#bind (按字母順序排序的關鍵字參考)

當我在前端部分註釋掉bind關鍵字時,實現了更多的mindfuck。然後錯誤說:

[WARNING] 226/132456 (36642) : config : frontend 'http-in' has no 'bind' directive. Please declare it as a backend if this was intended.🤷

這看起來像您使用了其他一些看起來像空格的空白字元,但實際上不是正常的空格字元,在bindand之間192.168.123.40:80。嘗試再次輸入文本,但這次使用正常空格(U+0020,ASCII 32)。

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