近期发现修改squid服务器的dns server配置后,无法生效,需要手工重启所有squid,今天查了一下,squid对dns的支持是这样一个原理:
1、如果dns server发送域名时带有ttl,则以此ttl为准,一般dns server都会带有对ttl的支持,现在我用的dnsmasq默认ttl是0。
2、如果dns server没发送ttl(ttl=0),squid就以自己的配置positive_dns_ttl为准,这个配置默认是6小时。
3、原先squid里配置的一个negative_dns_ttl,证实是配错了,这个配置指的是squid在取不到域名(出错)的情况下会多久再去重取。
我原先的情况是positive_dns_ttl和dns server的ttl都没有配置而配置了negative_dns_ttl,这时squid以默认的positive_dns_ttl为准,即6小时,这个时间对web服务器来说太长了。当前我解决的办法是修改dns server的ttl为60
秒,squid配置没有修改。因为直接修改squid的positive_dns_ttl配置项也是可以的。
有些朋友可能是用bind来做的dns,bind可能默认的ttl并不是0,所以用positive_dns_ttl配置不起效的话,修改ttl值就好。
附:检测dns服务器ttl值的方法
在一台linux机器上,修改/etc/resolv.conf将dns指向到要测试的dns,然后执行
dig test.com
如果该dns能解析test.com,就会返回一系列数据,其中有一列指明了ttl值,一试即知.
1、如果dns server发送域名时带有ttl,则以此ttl为准,一般dns server都会带有对ttl的支持,现在我用的dnsmasq默认ttl是0。
2、如果dns server没发送ttl(ttl=0),squid就以自己的配置positive_dns_ttl为准,这个配置默认是6小时。
3、原先squid里配置的一个negative_dns_ttl,证实是配错了,这个配置指的是squid在取不到域名(出错)的情况下会多久再去重取。
我原先的情况是positive_dns_ttl和dns server的ttl都没有配置而配置了negative_dns_ttl,这时squid以默认的positive_dns_ttl为准,即6小时,这个时间对web服务器来说太长了。当前我解决的办法是修改dns server的ttl为60
秒,squid配置没有修改。因为直接修改squid的positive_dns_ttl配置项也是可以的。
有些朋友可能是用bind来做的dns,bind可能默认的ttl并不是0,所以用positive_dns_ttl配置不起效的话,修改ttl值就好。
附:检测dns服务器ttl值的方法
在一台linux机器上,修改/etc/resolv.conf将dns指向到要测试的dns,然后执行
dig test.com
如果该dns能解析test.com,就会返回一系列数据,其中有一列指明了ttl值,一试即知.