在Nginx中配置DNS解析有多种方式,以下是常见的配置方法:
1. 使用变量实现动态DNS解析
http {
resolver 8.8.8.8 114.114.114.114 valid=30s;
server {
listen 80;
server_name example.com;
location / {
set $backend "backend.example.com";
proxy_pass http://$backend:8080;
proxy_set_header Host $host;
}
}
}
2. upstream块中的DNS配置
http {
resolver 8.8.8.8 114.114.114.114 valid=30s;
upstream backend_servers {
zone backend_zone 64k;
server backend1.example.com:8080 resolve;
server backend2.example.com:8080 resolve;
}
server {
listen 80;
location / {
proxy_pass http://backend_servers;
proxy_set_header Host $host;
}
}
}
3. 详细的resolver配置
http {
# DNS解析器配置
resolver 8.8.8.8 114.114.114.114 valid=30s ipv6=off;
# resolver参数说明:
# valid=30s - DNS记录缓存时间
# ipv6=off - 禁用IPv6解析
# status_zone - 状态监控区域
upstream dynamic_backend {
server api.example.com service=http resolve;
}
}
4. stream模块中的DNS配置(TCP/UDP代理)
stream {
resolver 8.8.8.8 valid=30s;
upstream database_cluster {
zone database_zone 64k;
server db1.example.com:3306 resolve;
server db2.example.com:3306 resolve;
}
server {
listen 3306;
proxy_pass database_cluster;
}
}
5 . 完整示例:带健康检查的动态代理
http {
resolver 127 .0 .0 .11 8 . 88 . 44 valid=60s;
upstream web_services {
zone web_pool 64k ;
server service1 .example .com : 80 resolve ;
server service2 .example .com : 80 resolve ;
}
server {
listen 80 ;
server_name localhost ;
location /health {
access_log off ;
return 200 "healthy \n" ;
}
location / {
proxy_pass http : //web_services ;
proxy_set_header Host $host ;
proxy_set_header X-Real-IP $remote_addr ;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for ;
# DNS解析失败处理
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
proxy_next_upstream_tries 2;
proxy_next_upstream_timeout 3s;
}
}
}
6 . Docker环境中的特殊配置
http {
# Docker内部DNS服务器 (CoreDNS/dockerd内置DNS)
resolver 127 .0 .0 .11 valid=10s ipv6 = off ;
upstream container_apps {
server app1 :8080 resolve ;
server app2 :8080 resolve ;
}
...其他配置...
}
关键注意事项:
1️⃣ resolver必须配置:使用变量或resolve时必须有resolver指令
2️⃣ 缓存时间valid:根据业务需求设置合理的DNS缓存时间
3️⃣ 多DNS服务器:建议配置多个DNS服务器提高可靠性
4️⃣ 容器环境:Docker中使用127.0.0.11作为DNS服务器
5️⃣ IPv6控制:如不需要IPv6,使用ipv6=off禁用
内容由零声教学AI助手提供,问题来源于学员提问




