作为测试,我运行了一个本地绑定实例:
>netstat -ant | grep LISTEN
tcp 0 0 10.72.186.23:53 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN
...
>nslookup mysubdomain.example.com 127.0.0.1
Server: 127.0.0.1
Address: 127.0.0.1#53
Name: mysubdomain.example.com
Address: nn.nn.nn.251
Name: mysubdomain.example.com
Address: nn.nn.nn.249
Name: mysubdomain.example.com
Address: nn.nn.nn.201
Name: mysubdomain.example.com
Address: nn.nn.nn.138
Run Code Online (Sandbox Code Playgroud)
我在同一主机上运行haproxy 1.6.2,带有解析器部分:
resolvers dns
nameserver dns1 127.0.0.1:53
nameserver dns2 10.72.186.23:53
hold valid 10s
Run Code Online (Sandbox Code Playgroud)
它不会拒绝解析器部分,但似乎也没有使用它.它不会显示在统计信息页面中,并尝试添加此服务命令:
server mysubdomain-dev mysubdomain.example.com
Run Code Online (Sandbox Code Playgroud)
导致此错误:
>service haproxy restart
* Restarting haproxy haproxy
[ALERT] 322/171813 (10166) : parsing [/etc/haproxy/haproxy.cfg:77] : 'server mysubdomain-dev' : invalid address: 'mysubdomain.example.com' in 'mysubdomain.example.com'
[ALERT] 322/165300 (29751) : Error(s) found in configuration file : /etc/haproxy/haproxy.cfg
[ALERT] 322/165300 (29751) : Fatal errors found in configuration.
Run Code Online (Sandbox Code Playgroud)
haproxy doc https://cbonte.github.io/haproxy-dconv/configuration-1.6.html表明这应该有效.
服务器<名称> <地址> [:[端口]] [param*]
...
<address>是服务器的IPv4或IPv6地址.或者,支持可解析的主机名,但在启动期间将解析此名称.地址"0.0.0.0"或"*"具有特殊含义.
是否需要将其他一些部分添加到激活解析器部分的haproxy.cfg中?
当HAProxy首次启动时,它会尝试解析所有后端中任何服务器的主机名以填充服务器结构.在第一个启动阶段,HAProxy使用操作系统解析程序,即通常是/etc/resolv.conf文件中定义的服务器.
仅在稍后,当检查期间更新服务器的IP地址时,HAProxy将使用其内部解析程序配置及其内部DNS解析程序.
从您的错误描述中,现在看起来您的主机本身无法解析mysubdomain.example.com主机名.只有在没有明确命名的名称服务器的情况下它才能解析主机名,HAProxy才能启动.这可以通过例如验证
dig mysubdomain.example.com
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2405 次 |
| 最近记录: |