Apache:在代理传递中遵守DNS ttl

我们试图设置一堆Apaches 2.4.18来代理将收到的请求传递给合作伙伴的上游服务器。 我们的合作伙伴使用亚马逊的Elastic Load Balancing,因此我们唯一知道的服务器就是它的DNS名称。

DNSlogging的TTL是60秒,我想知道Apache是​​否可以遵守这个ttl,只要DNSlogging有效,然后在TTL过期时请求翻译就保持连接正常。

使用mod_proxy DisableReuse = on强制在每次上游需要资源时打开一个新的连接。 只要下面的操作系统进行DNS TTLcaching,就可以实现这个function。 如果没有,每次需要一个新的资源时,Apache将强制一个新的DNS请求,增加响应时间。

我想过玩mod_proxy ttl和超时参数,但我认为我没有正确解决这个问题。 根据文档,mod_proxy的超时参数控制一个套接字等待来自上游的数据的时间,但我不确定Apache实例是否会closures连接并打开一个新的连接。 此外,玩超时是容易出错的,因为较低的值可能会向客户端发送错误的答案。

我花了一些时间试图解决这个设置没有喜悦。 有没有特别的设置来覆盖这种情况? 或者我也跳过了一些东西? 任何帮助,将不胜感激。

最好,

Gustau

唯一可以帮助你的用例的选项是disablereuse=On

DNS查询由glibc的parsing器部分执行。 结果不会被这个库或OS所caching。 在Apache的情况下,DNS结果由apache工作进程caching。 你可以有一个DNS服务,如nscddnsmasq ,这是做DNScaching。

这里是apache文档的摘录。

https://httpd.apache.org/docs/2.4/mod/mod_proxy.html#workers

原始域的DNSparsing

第一次创build到原始域的套接字时,会发生DNSparsing。 启用连接重用时,每个subprocess只parsing每个后端域,并为所有其他连接进行caching,直到subprocess被回收为止。 在规划涉及后端域的DNS维护任务时,应该考虑这些信息。 还请检查ProxyPass参数以获取有关连接重用的更多详细信息。

https://httpd.apache.org/docs/2.4/mod/mod_proxy.html#proxypass

disablereuse(默认是“Off”)当你想强制mod_proxy在使用后立即closures到后端的连接,并因此禁用其后端的持久连接和池时,应该使用这个参数。 这有助于Apache httpd和后端服务器(不pipe协议)之间的防火墙倾向于无声地丢弃连接,或者当后端本身可能在循环DNS下时。 启用连接重用后,每个subprocess只parsing一次后端域(使用DNS查询),并为所有进一步的连接caching,直到subprocess被回收为止。 要禁用连接重用,请将此属性值设置为On。

为了您的情况,最好使用nginx或haproxy。 Apache重负责代理查询。

Nginx可以像下面这样设置parsing器:

 server { ... resolver 127.0.0.1; set $backend_upstream "http://dynamic.example.com:80"; proxy_pass $backend_upstream; ... } 

你可以在这里阅读关于haproxy的超时,以及在这里的 nginx超时。 热设置nginx 。