Ubuntu 12.04で実行されているHaproxy 1.5.12の使用
Webサイトへのアクセスを、特定のIPからのリクエスト、またはリクエストに定義されたパラメーターを持つリクエストに制限する必要があります。
したがって、たとえば次のリクエストは承認されたIPからのみ機能するはずです。
http://www-test.example.com/page.php
そして、このリクエストは任意のIP(許可されたものを含む)から実行する必要があります。
http://www-test.example.com/page.php?devtool=1
私のACLは次のとおりです。
acl is_test hdr(Host) -m sub test
acl is_allowed src -f /etc/haproxy/allowed_ips
acl is_devtool urlp(devtool) 1
acl is_devtool hdr_sub(Referer) devtool=1
排他的に使用した場合、正常に機能します。
http-request deny if is_test ! is_allowed
または
http-request deny if is_test ! is_devtool
しかし、これらをORと組み合わせた場合、許可されたIPからURLにアクセスできません(テストを反転しても役に立ちません)。
http-request deny if is_test ! is_allowed || is_test ! is_devtool
これを行う方法はありますか?
ありがとう
あなたが課したいと思っているように見えるテストはこれです:
_A && !(B || C)
_
...しかし、それはあなたが書いたものと論理的に同等ではありません。
_(A && !B) || (A && !C)
_
優先順位に括弧を使用しないA && !(B || C)
の論理的な同等物は、実際には次のとおりです。
_A && !B && !C
_
だからあなたが探しているのはこれです:
_http-request deny if is_test !is_allowed !is_devtool
_
または、言い換えると、要求を拒否します-
is_test
_、andと一致しますis_allowed
_、andと一致しませんis_devtool
_と一致しませんこれらの条件のいずれかがfalse(テストではなく、許可されており、devtoolである)である限り、ルールは一致せず、要求を拒否しません。