Configuration

使用 req.cook 的 HAProxy 配置文件錯誤

  • March 8, 2016

我正在關注本教程(或多或少),試圖使用 haproxy 進行快速簡便的 A/B 測試設置,而 haproxy 不喜歡我的配置文件,原因我無法辨識。

配置文件:

global  
log    127.0.0.1 local1 debug
chroot /var/lib/haproxy
user   haproxy
group  haproxy
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

frontend http
bind *:80

acl is_current-area_cookie req.cook(Current-Area) -m found
acl is_new-area_cookie     req.cook(New-Area) -m found
## Other ACL's

use_backend current_area   if is_current-area_cookie
use_backend new_area       if is_new-area_cookie

use_backend weighted_area  if !is_current-area_cookie !is_new-area_cookie
## Other Backend handling

backend current_area
   server current_area 127.0.0.1:81

backend new_area
   server new_area     127.0.0.1:82

backend weighted_area
   server current_area 127.0.0.1:81 weight 70
   server new_area     127.0.0.1:82 weight 30

和錯誤:

[ALERT] 063/165427 (31203) : parsing [/etc/haproxy/haproxy.cfg:27] : error detected while parsing ACL 'is_current-area_cookie'.
[ALERT] 063/165427 (31203) : parsing [/etc/haproxy/haproxy.cfg:28] : error detected while parsing ACL 'is_new-area_cookie'.
[ALERT] 063/165427 (31203) : parsing [/etc/haproxy/haproxy.cfg:31] : error detected while parsing switching rule.
[ALERT] 063/165427 (31203) : parsing [/etc/haproxy/haproxy.cfg:32] : error detected while parsing switching rule.
[ALERT] 063/165427 (31203) : parsing [/etc/haproxy/haproxy.cfg:34] : error detected while parsing switching rule.
[ALERT] 063/165427 (31203) : Error(s) found in configuration file : /etc/haproxy/haproxy.cfg
[ALERT] 063/165427 (31203) : Fatal errors found in configuration.

我已經閱讀了所有 HAProxy 的文件,尤其是關於req.cook()並且找不到我的語法有任何問題的東西……

結果發現 Ubuntu 的 repos 包含一個相當舊的(1.4)版本的 HAProxy,這個例子使用了一些在 1.5 中添加的指令。

升級到最新的穩定版本 (1.6) 後,此配置有效。

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