Eu uso o HAproxy 1.6 como balanceador de carga na frente de servidores tomcat.
Preciso adicionar cabeçalhos de resposta com base no URI da solicitação.
Por exemplo, eu gostaria de adicionar o cabeçalho da resposta Cache-Control public,max-age="600"
quando a uri da solicitação é, /api
mas não quando a uri da solicitação é outra coisa.
Minha primeira tentativa foi usar acl com base no caminho para adicionar os cabeçalhos à resposta http:
acl api path_reg ^/api/(.*)$ http-response add-header Cache-Control public,max-age="600" if api
Quando inicio a haproxy
-d
, tenho um aviso dizendo quepath_reg
(oupath
) é incompatível comhttp-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'
Eu tentei adicionar o cabeçalho em
http-request
vez dehttp-response
:acl api path_reg ^/api/(.*)$ http-request add-header Cache-Control public,max-age="600" if api
Isso funcionou, mas eu preciso disso na resposta
Eu também tentei usar variáveis 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
Mas quando tento o HAproxy, o evento não inicia e tenho o seguinte erro:
[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)]'.
Como posso usar o caminho da solicitação em uma ACL para definir o cabeçalho da resposta?
fonte
capture.req.uri
e variáveis ao remover%[ ]
emacl̀
estão trabalhando. Você também está certo sobre as aspas relacionadas aomax-age
valor e aoset-header
invés deadd-header
.Cache-Control
resposta: adiciono umCache-Control-Authority: implicit, gateway
cabeçalho para fornecer ao desenvolvedor / solucionador de problemas / testador um aviso de que eu, o proxy, estou fornecendo esse cabeçalho, não o aplicativo , mas o aplicativo pode me desativar simplesmente fornecendo seu próprio cabeçalho. Observe que esse cabeçalho não é nada padrão - acabei de inventar, para ajudar os outros membros da equipe a saberem que eu estava fornecendo isso em linha, não o aplicativo. Os proxies são tão livres de problemas que eles têm o mau hábito de esquecer que estão no caminho.