Uso HAproxy 1.6 como equilibrador de carga frente a los servidores Tomcat.
Necesito agregar encabezados de respuesta basados en el URI de solicitud.
Por ejemplo, me gustaría agregar el encabezado de respuesta Cache-Control public,max-age="600"
cuando la uri de la solicitud es /api
pero no cuando la uri de la solicitud es otra cosa.
Mi primer intento fue usar acl basado en la ruta para agregar los encabezados a la respuesta http:
acl api path_reg ^/api/(.*)$ http-response add-header Cache-Control public,max-age="600" if api
Cuando empiezo con haproxy
-d
, tengo una advertencia que dice quepath_reg
(opath
) es incompatible 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'
Traté de agregar el encabezado en
http-request
lugar dehttp-response
:acl api path_reg ^/api/(.*)$ http-request add-header Cache-Control public,max-age="600" if api
Eso funcionó pero lo necesito en la respuesta
También intenté usar variables 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
Pero cuando intento que HAproxy no se inicie y tengo el siguiente error:
[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)]'.
¿Cómo puedo usar la ruta de solicitud en una acl para establecer el encabezado de respuesta?
fuente
capture.req.uri
y las variables mientras se quita%[ ]
enacl̀
están trabajando. También tiene razón acerca de las citas en torno almax-age
valor y enset-header
lugar deadd-header
.Cache-Control
respuesta: agrego unCache-Control-Authority: implicit, gateway
encabezado para darle al desarrollador / solucionador de problemas / probador un aviso que yo, el proxy, estoy proporcionando ese encabezado, no la aplicación , pero la aplicación puede deshabilitarme simplemente proporcionando su propio encabezado. Tenga en cuenta que este encabezado no es nada estándar: lo inventé para ayudar a otros miembros del equipo a saber que estaba proporcionando esto en línea, no la aplicación. Los proxies están tan libres de problemas que tienen la mala costumbre de olvidar que están en el camino.