梦绪心痕 發表於 2021-10-12 16:15:00

nginx反向代理使用域名的缓存问题

<div>一般情况下,我们使用nginx反向代理到后端用的是ip或者地址池。例如</div>
<div id="2950-1634022687927" data-theme="default" data-language="javascript">
<div class="cnblogs_Highlighter">
<pre class="brush:bash;gutter:true;">location /api {
    proxy_pass http://192.168.150.100:8000/api;
    }
</pre>
</div>
<p>  或者</p>
<div class="cnblogs_Highlighter">
<pre class="brush:bash;gutter:true;">upstream myserver {
    server 192.168.150.100:8000; #APP1 ip:port
    server 192.168.150.101:8000; #APP1 ip:port
    server 192.168.150.102:8000; #APP3 ip:port
}
......

location /api {
    proxy_pass http://myserver/api;
    proxy_set_header Host $http_host;
}</pre>
</div>
</div>
<div>这种情况不存在nginx缓存问题</div>
<div>但是有时候我们也会反向代理到域名上</div>
<div id="2369-1634023617614" data-theme="default" data-language="javascript">
<div class="cnblogs_Highlighter">
<pre class="brush:bash;gutter:true;">location /api {
    proxy_pass http://www.test.com:8000/api;
}</pre>
</div>
</div>
<div>  在我之前做的一个项目上就这样做过,域名通过GTM解析,分发流量。而且最开始成功了,并没有问题。但是在某次www.test.com域名指向的两台服务器挂了一台之后,整个服务就出现问题,访问不了。看日志nginx对www.test.com解析一直只指向一台服务器。</div>
<div>  重启nginx之后,访问才恢复正常。</div>
<div>  查阅资料之后对于代理反向指向域名的这种方式,nginx只会根据启动时从服务器获取的解析IP进行代理,直到下一次nginx重启,或者reload。这样一来其实GTM的流量分发并没有意义,并且服务架构还存在隐患。</div>
<div>  那么如何让nginx实时解析反向代理的域名呢?</div>
<div>  可以使用nginx的resolver。示例如下</div>
<div id="5521-1634025213655" data-theme="default" data-language="javascript">
<div class="cnblogs_Highlighter">
<pre class="brush:bash;gutter:true;">server {
    listen 8080;
    server_name localhost;
    resolver 114.114.114.114 223.5.5.5 valid=60s;
    resolver_timeout 3s;
    set $test "www.test.com";
    location /api {
    proxy_pass http://$test;
    }
}</pre>
</div>
</div>
<div>说明:</div>
<div>resolver:后接指定的DNS服务器。多个用空格隔开。resolver可以在http里面全局设定,也可以在server里面设定。</div>
<div>valid:DNS缓存时间。也可以不指定,缓存时间会默认根据域名的TTL时间</div>
<div>resolver_timeout:指定解析域名时,DNS服务器的超时时间</div>
<div>set :设置变量。在使用resolver之后,必须使用set设置变量来代替域名。否则会报错。另外,set不能写到 location里面否则不会生效。</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<p></p><br><br>
来源:https://www.cnblogs.com/slena/p/15398381.html
頁: [1]
查看完整版本: nginx反向代理使用域名的缓存问题