Nginx proxy_pass DNS 变化后无法正常代理
1 min read

Nginx proxy_pass DNS 变化后无法正常代理

问题描述:

当时配置 proxy_pass 为域名时,当DNS发生变化后,代理则会失效。配置示例如下:

server {
 listen 443 ssl;
 server_name xxx.com;
  
 location /
   {
     proxy_pass http://xxx.com;
  }
}

导致该问题的原因,是Nginx只会在启动或者重新加载时,通过DNS服务获取域名的真实IP,实际代理到的是IP而不是域名。所当DNS发生变化时,则会失效。

问题解决:

解决方案一,可以通过手动设置DNS刷新时间解决,可以粗略解决问题,配置示例如下:

server {
 listen 443 ssl;
 server_name xxx.com;
 
 resolver 119.29.29.29 8.8.8.8 valid=60s;
 set $domain xxx.com;
  
 location /
   {
     proxy_pass http://$domain;
   }
}

解决方案二,当DNS发生变更后,通知Nginx执行reload。该方案需要一个守护服务来接收通知和执行reload,但是可以精准控制DNS刷新时间。