利用Nginx实现动态地址解析
要实现 Nginx 动态地址解析,查阅了官方文档,才发现官方解释说的非常清楚:说是在反向代理的使用场景中,当 upstream 后端用域名时,配置 resolver 以便于 Nginx 能够解析该域名。

- 最近工作中有一个反向代理的需求,就是给客户提供一个 data.wsescape.com 的域名用来访问内部提供的 API 接口。但是提供接口的服务器在另外一台主机上面,所以需要对请求进行二次转发,转发到 data.misssun.com 这个域名下面。
- 首先想到的是,使用 upstream 进行反向代理就可以很好地解决这个问题,但是因为 data.misssun.com 这个域名对应的服务器 IP 地址会动态的变化,导致 upstream 反向代理会出现 502 的情况。
- 通过查阅资料,发现可以通过制定 resolver 字段对域名进行间隔时间的解析,可以完美的实现动态地址解析的效果。通过 resolver 可以配置多个 DNS 服务器地址,Nginx 会采用轮询的方式去访问 DNS 服务,Nginx 会缓存 DNS 对域名解析的结果,缓存的时间由 valid 指定。
user nginx; worker_processes auto; pid /run/nginx.pid; events { worker_connections 1024; } http { 1. Logging Settings log_format wsescape '$remote_addr - $remote_user [$time_local] ' '"$request" $status $body_bytes_sent ' '$request_length $request_time $upstream_response_time ' '"$http_referer" "$http_user_agent"'; 1. Domain name resolution resolver 114.114.114.114 valid=5s; sendfile on; tcp_nopush on; tcp_nodelay on; keepable_timeout 65; types_hash_max_size 2048; include /etc/nginx/mime.types; default_type application/octet-stream; 1. Gzip Settings gzip on; gzip_buffers 4 8k; gzip_types text/css text/javascript text/xml text/plain text/x-component application/javascript application/json application/xml application/rss+xml font/truetype font/opentype application/font-woff application/vnd.ms-fontobject image/svg+xml; server { listen 80; server_name data.wsescape.com; access_log /var/log/nginx/wsescape.nginx.access.log wsescape; error_log /var/log/nginx/wsescape.nginx.error.log error; set $realip "data.misssun.com"; location / { return 404; } location /api/ { proxy_pass_header Server; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Scheme $scheme; proxy_http_version 1.1; if ($request_uri ~* "/api/app/data?id=(.*)") { set $id $1; rewrite .* /api/data/$id break; proxy_pass http://$realip:1556; } } } }