Tom*_*Tom 13 regex access-control-list haproxy
我的 haproxy.conf 中有以下几行:
acl valid_domains hdr(Host) -i mysite.com images.mysite.com docs.mysite.com admin.mysite.com
redirect location http://mysite.com/invalid_domain if !valid_domains
Run Code Online (Sandbox Code Playgroud)
我如何匹配任何子域?
我试过:
acl valid_domains hdr(Host) -i *.mysite.com
和:
acl valid_domains hdr(Host) -i [a-z]+.mysite.com
......但都没有奏效。
谢谢
小智 15
我觉得hdr_sub更适合您的需求。我使用 hdr_end 有一段时间了,但遇到了以下问题:
使用端口 80 的请求通常会剥离端口,因此主机标头看起来像“example.com”,但是如果您在端口上明确请求,例如 example.com:8080,标头将具有端口,并且 hdr_end 将失败检查“example.com”。
hdr_sub 将进行子字符串匹配,这似乎更适合您(和我)。
任何一种解决方案仍然有一个我不喜欢的讨厌的东西。结果的顺序相关评估。
例如(我的条件在前端看起来像这样)
acl is_dbadmin hdr_sub(host) -i dbadmin.example.com
Run Code Online (Sandbox Code Playgroud)
在端口 8080 上请求将是这样的:
Jul 9 02:48:40 localhost haproxy[8]: 192.168.1.1:55870 [09/Jul/2015:02:48:40.865] http-in example/s1 1/0/0/20/110 200 330722 - - ---- 0/0/0/0/0 0/0 {**example.com:8080**||http://example.com:} {Apache/2.4.10 (Debia||||} "GET /wp-includes/js/zxcvbn.min.js HTTP/1.1"
Run Code Online (Sandbox Code Playgroud)
端口 80 可能是这样的
Jul 9 02:48:40 localhost haproxy[8]: 192.168.1.1:55870 [09/Jul/2015:02:48:40.865] http-in example/s1 1/0/0/20/110 200 330722 - - ---- 0/0/0/0/0 0/0 {example.com||***http://example.com***:} {Apache/2.4.10 (Debia||||} "GET /wp-includes/js/zxcvbn.min.js HTTP/1.1"
Run Code Online (Sandbox Code Playgroud)
qua*_*nta 14
hdr_end就是你要找的。尝试这个:
acl valid_domains hdr_end(host) -i mysite.com
redirect location http://mysite.com/invalid_domain if !valid_domains
Run Code Online (Sandbox Code Playgroud)
gre*_*mac 12
在某些情况下,您需要对此进行明确说明,例如处理具有多级子域的通配符 SSL 的重定向。
匹配结束 ( hdr_endor -m end) 或子字符串 ( hdr_subor -m sub) 可能会产生超出预期的匹配的意外副作用。在许多情况下,这可能并不重要,因为这些域没有流量进入服务器,但这并不意味着它是技术上正确的解决方案。
使用正则表达式是我发现进行显式匹配的最佳方式。例如,如果您只想匹配*.example.org而不匹配sub.domain.example.org:
acl valid_domains hdr(host) -m reg -i ^[^\.]+\.example\.org$
Run Code Online (Sandbox Code Playgroud)
如果您还想处理(任何)非标准端口,可以稍微扩展一下:
acl valid_domains hdr(host) -m reg -i ^[^\.]+\.example\.org(:[0-9]+)?$
Run Code Online (Sandbox Code Playgroud)
以上将匹配:
test1.example.org test2.example.org:8080 并且将不匹配:
example.org two.subs.example.orgmyexample.orgtest.myexample.orgtest.example.org.other.com| 归档时间: |
|
| 查看次数: |
48627 次 |
| 最近记录: |