On Tue, Jul 15, 2014 at 7:14 PM, Pavlos Parissis <[email protected]> wrote: > On 15/07/2014 05:49 μμ, Baptiste wrote: >> On Tue, Jul 15, 2014 at 12:40 AM, [email protected] <[email protected]> >> wrote: >>> Hi folks, >>> >>> >>> I've a question regarding the ordering/processing of ACL's. >>> >>> >>> >>> Example (HAProxy 1.4.24): >>> >>> >>> ---- >>> >>> frontend http_in >>> . >>> . >>> >>> >>> acl is_example.com hdr_beg(host) -i example.com >>> >>> acl check_id url_reg code=(1001|1002|............) >>> >>> acl check_id url_reg code=(3000|4001|............) >>> >>> use_backend node01 if is_example.com check_id >>> >>> >>> >>> acl is_example.de hdr_beg(host) -i example.de >>> >>> acl check_id url_reg code=(6573|7890) >>> >>> use_backend node02 if is_example.de check_id >>> >>> >>> ---- >>> >>> >>> >>> I assumed that the "check_id" - ACL from the second block wouldn't be >>> combined/OR'ed with the 2 "check_id" - ACL's from the first block >>> (because of the other configuration statements in between). >>> >>> >>> >>> But they are combined/OR'ed, is this behavior intended ? >>> >>> >>> >>> Thanks, >>> ------------------- >>> >>> Bjoern >>> >> >> Hi Bjoern, >> >> ACLs are processed only if they are called by a directive. >> When many ACLs are called by a directive, an implicit logical AND is applied. >> an explicit logical OR can be declared as well >> when a AND is applied between many ACLs, HAProxy stops processing them >> as soon as one is wrong >> when a OR is applied between many ACLs, HAProxy stops processing them >> as soon as one is true >> >> some ACLs are cheaper to run than other, make your choice :) >> >> Side note, to avoid any mistake in your conf: >> acl is_example.de hdr_beg(host) -i example.de >> => this will match http://example.de/path/path/blah.php >> or http://example.de.google.com/path/path/blah.php >> >> you might want to match this: >> acl is_example.de hdr_end(host) -i example.de >> > > > Is URI part of Host header? > > Cheers, > Pavlos > > >
Hi Pavlos, not at all, sorry for confusing. Your browser should split your URL in 2 parts: - Host header containing the hostname of the service - url path http://my.domain.tld/path will be sent as GET /path HTTP/1.1 Host: my.domain.tld Baptiste

