Tomcatサーバーの前のロードバランサーとしてHAproxy 1.6を使用しています。
リクエストURIに基づいて応答ヘッダーを追加する必要があります。
たとえば、リクエストuriがCache-Control public,max-age="600"
の場合はレスポンスヘッダー/api
を追加しますが、リクエストuriが別の場合は追加しません。
私の最初の試みは、ヘッダーをhttp-responseに追加するためにパスに基づいてACLを使用することでした:
acl api path_reg ^/api/(.*)$
http-response add-header Cache-Control public,max-age="600" if api
-d
でhaproxyを開始すると、path_reg
(またはpath
)はhttp-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'
http-request
ではなくhttp-response
にヘッダーを追加しようとしました:
acl api path_reg ^/api/(.*)$
http-request add-header Cache-Control public,max-age="600" if api
それはうまくいったが、私は応答でそれを必要とする
私も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
しかし、HAproxyを起動しようとしてもイベントが開始せず、次のエラーが発生します。
[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)]'.
ACLへの要求パスを使用して応答ヘッダーを設定するにはどうすればよいですか?
これを試して:
_http-response set-header Cache-Control no-cache,\ max-age=600 if { capture.req.uri -m beg /api/ }
_
_capture.req.uri
_は、処理されないpath
とは異なり、応答が処理されるまで存続します。
いくつかのメモ:
この例では、匿名ACLを使用しています。名前付きACLを使用することもできますが、これには2行かかります。
Max-ageの値を引用する理由を私が知っている理由はありません。
あなたはおそらく_add-header
_をしたくないでしょう、あなたは_set-header
_をしたいでしょう。
acl path_acl %[var(txn.path)] -m ^/api/(.*)$
は、おそらくacl path_acl var(txn.path) -m ^/api/(.*)$
として正しく記述されています。 HAProxyは、_%[ ]
_を予期する場合と予期しない場合について、少し注意が必要です。確かにパターンはあると思いますが、何なのかはわかりません。