要实现
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 {
# 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"';
# 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;
# 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;
}
}
}
}