Uso HAproxy 1.6 come bilanciamento del carico davanti ai server Tomcat.
Devo aggiungere intestazioni di risposta basate sull'URI della richiesta.
Ad esempio, vorrei aggiungere l'intestazione della risposta Cache-Control public,max-age="600"
quando l'uri richiesta è /api
ma non quando l'uri richiesta è qualcos'altro.
Il mio primo tentativo è stato utilizzare acl in base al percorso per aggiungere le intestazioni alla risposta http:
acl api path_reg ^/api/(.*)$ http-response add-header Cache-Control public,max-age="600" if api
Quando inizio haproxy con
-d
, ho un avviso che dice chepath_reg
(opath
) è incompatibile conhttp-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'
Ho provato ad aggiungere l'intestazione
http-request
invece dihttp-response
:acl api path_reg ^/api/(.*)$ http-request add-header Cache-Control public,max-age="600" if api
Ha funzionato ma ne ho bisogno nella risposta
Ho anche provato a usare le variabili 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
Ma quando provo HAproxy non si avvia l'evento e ho il seguente errore:
[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)]'.
Come posso usare il percorso della richiesta in un acl per impostare l'intestazione della risposta?
capture.req.uri
e variabili durante la rimozione%[ ]
inacl̀
stanno lavorando. Hai anche ragione sulle virgolette sulmax-age
valore e sulset-header
invece diadd-header
.