Tôi sử dụng HAproxy 1.6 làm bộ cân bằng tải trước các máy chủ tomcat.
Tôi cần thêm các tiêu đề phản hồi dựa trên URI yêu cầu.
Ví dụ: tôi muốn thêm tiêu đề phản hồi Cache-Control public,max-age="600"khi uri yêu cầu /apinhưng không phải khi uri yêu cầu là thứ gì đó khác.
Thử nghiệm đầu tiên của tôi là sử dụng acl dựa trên đường dẫn để thêm các tiêu đề vào phản hồi http:
acl api path_reg ^/api/(.*)$ http-response add-header Cache-Control public,max-age="600" if apiKhi tôi bắt đầu haproxy với
-d, tôi có cảnh báo nói rằngpath_reg(hoặcpath) không tương thích vớihttp-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'Tôi đã cố gắng để thêm tiêu đề
http-requestthay vìhttp-response:acl api path_reg ^/api/(.*)$ http-request add-header Cache-Control public,max-age="600" if apiĐiều đó đã làm việc nhưng tôi cần nó trong phản ứng
Tôi cũng đã thử sử dụng các biến 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_aclNhưng khi tôi thử HAproxy không bắt đầu sự kiện và tôi gặp lỗi sau:
[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)]'.
Làm cách nào tôi có thể sử dụng đường dẫn yêu cầu vào acl để đặt tiêu đề phản hồi?
capture.req.urivà các biến đồng thời lấy đi%[ ]trongacl̀đang làm việc. Bạn cũng đúng về các trích dẫn xung quanhmax-agegiá trị vàset-headerthay vìadd-header.