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 /api
như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 api
Khi 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-request
thay 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_acl
Như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.uri
và 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-age
giá trị vàset-header
thay vìadd-header
.