Я використовую HAproxy 1.6 як балансир завантаження перед серверами tomcat.
Мені потрібно додати заголовки відповідей на основі URI запиту.
Наприклад, я хотів би додати заголовок відповіді, Cache-Control public,max-age="600"
коли є uri запиту, /api
але не тоді, коли uri запиту є чимось іншим.
Першою моєю спробою було використання acl на основі шляху, щоб додати заголовки до http-відповіді:
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
вартості таset-header
замість нихadd-header
.