我将HAproxy 1.6用作Tomcat服务器前的负载平衡器。
我需要基于请求URI添加响应头。
例如,我想Cache-Control public,max-age="600"
在请求uri是时添加响应头,/api
但在请求uri是其他东西时不添加。
我的第一次尝试是使用基于路径的acl将标头添加到http-response:
acl api path_reg ^/api/(.*)$ http-response add-header Cache-Control public,max-age="600" if api
当我使用启动haproxy时
-d
,我警告说path_reg
(或path
)与http-response
以下版本不兼容:Dec 6 15:22:29 ip-10-30-0-196 haproxy-systemd-wrapper[315]: [WARNING] 340/152229 (2035) : parsing [/etc/haproxy/haproxy.cfg:78] : acl 'api' will never match because it only involves keywords that are incompatible with 'backend http-response header rule'
我尝试添加标头
http-request
而不是http-response
:acl api path_reg ^/api/(.*)$ http-request add-header Cache-Control public,max-age="600" if api
那行得通,但我需要回应
我也尝试使用haproxy变量:
http-request set-var(txn.path) path acl path_acl %[var(txn.path)] -m ^/api/(.*)$ http-response add-header Cache-Control public,max-age="600" if path_acl
但是,当我尝试HAproxy时,事件不会启动,并且出现以下错误:
[ALERT] 340/162647 (2241) : parsing [/etc/haproxy/haproxy.cfg:48] : error detected while parsing ACL 'path_acl' : unknown fetch method '%[var' in ACL expression '%[var(txn.path)]'.
如何使用ACL中的请求路径来设置响应标头?
capture.req.uri
和变量,同时消除%[ ]
在acl̀
正常工作。您也对max-age
value 周围的引号和set-header
而不是正确add-header
。