Ich verwende HAproxy 1.6 als Load Balancer vor Tomcat-Servern.
Ich muss Antwortheader basierend auf dem Anforderungs-URI hinzufügen.
Zum Beispiel möchte ich den Antwortheader hinzufügen, Cache-Control public,max-age="600"
wenn die Anforderungs-Uri ist, /api
aber nicht, wenn die Anforderungs-Uri etwas anderes ist.
Mein erster Versuch war die Verwendung von acl basierend auf dem Pfad, um die Header zu http-response hinzuzufügen:
acl api path_reg ^/api/(.*)$ http-response add-header Cache-Control public,max-age="600" if api
Wenn ich mit Haproxy beginne
-d
, wird die Warnung angezeigt , dasspath_reg
(oderpath
) nicht kompatibel ist mithttp-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'
Ich habe versucht, den Header hinzuzufügen,
http-request
anstatthttp-response
:acl api path_reg ^/api/(.*)$ http-request add-header Cache-Control public,max-age="600" if api
Das hat funktioniert, aber ich brauche es in der Antwort
Ich habe auch versucht, Haproxy-Variablen zu verwenden:
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
Aber wenn ich HAproxy versuche, startet kein Ereignis und ich habe den folgenden Fehler:
[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)]'.
Wie kann ich den Anforderungspfad in eine ACL verwenden, um den Antwortheader festzulegen?
capture.req.uri
und Variablen beim Entfernen%[ ]
inacl̀
arbeiten. Sie haben auch Recht mit den Anführungszeichen ummax-age
Wert undset-header
anstelle vonadd-header
.