Hello,

On Mon, 5 Oct 2026 at 17:28, Björn Jacke <[email protected]> wrote:
>
> Hi,
>
> I see a weird issue with logical OR operator in an ACL:
>
> acl requests-chrome hdr(sec-ch-ua)  -m sub \"Not || hdr(sec-ch-ua) -m
> sub HeadlessChrome || hdr(user-agent) -m sub Chrome

There is no OR operator here. Everything after the first -m sub is
considered the string you are looking for in the HTTP header, which of
course cannot be found.

A couple of rules to keep in mind:

- one ACL line uses one condition (perhaps matched against a list of
values, but not different conditions), multiple "-m" statements per
line are not a thing, it will just be interpreted as a string.
- a and/or condition in the ACL condition is not a thing, it will just
be interpreted as a string.
- and/or conditions are available when you are REFERING to acl's, NOT
in the condition field of ACL itself

The way to write this ACL is:
acl requests-chrome hdr(sec-ch-ua) -m sub \"Not
acl requests-chrome hdr(sec-ch-ua) -m sub HeadlessChrome
acl requests-chrome hdr(user-agent) -m sub Chrome

Or if those would be 3 different ACLs then you would actually use the
or operator in the use-server directive:
use-server hrx0-chrome if requests-chrome-acl1 or requests-chrome-acl2
or requests-chrome-acl3

See section 7.2 of the docs for some examples.


Lukas


Reply via email to