Nginx服务
对非同源地址的nginx配置要求
http同端口访问http跳转https(497错误)
关于Nginx 的 location 匹配规则总结
Nginx+LUA+Redis实现token访问鉴权
Nginx实现后端Server域名动态解析
Nginx反向代理跨域问题
浏览器报错ERR_CONTENT_LENGTH_MISMATCH
Nginx常见HTTP Code错误排查
使用acme.sh部署证书至Nginx
Nginx在普通用户下使用特权端口 (443端口)
Nginx配置自定义状态页
try_files和alias的组合使用
Nginx中301重定向导致端口丢失
本文档使用 MrDoc 发布
-
+
home page
Nginx实现后端Server域名动态解析
## 问题源 标准情况下,Nginx使用反向代理时通常采用`pass_proxy http://ip`或`pass_proxy http://domain`的形式提供,且域名通常解析为固定IP。 但当出现如下业务架构时,Nginx的标准配置的业务将导致无法正常访问: - 后端提供服务的主机地址不固定(动态IP),但存在固定域名地址 - 现需要通过Nginx配置反向代理配置,实现稳定访问后端服务 ## NginxDNS解析原理 ### 静态解析 在标准配置中,NGINX启动运行时,会使用本机在/etc/hosts和/etc/resolve.conf中配置的主机和DNS服务器对域名进行解析。该解析过程是通过lib C的函数getaddrinfo进行的同步操作。 如果解析失败,NGINX就不能成功启动。解析得到的ip地址会一直伴随着NGINX运行的整个生命周期。如果在运行期间对应域名的ip地址发生变化,服务就会中断。唯一的解决办法就是重新启动(reload)NGINX。 ### 动态解析 开源版的NGINX提供了resolver这种动态的dns解决方案。核心思想是NGINX自身充当dns的客户端进行动态dns解析。 使用方法: `resolver`指令和`upstream`需要配套使用,动态缓存时间vaild可选设置,必须依赖`resolver`配置项中的dns地址进行域名解析。 >Nginx示例配置 ```bash resolver 114.114.114.114 valid=30s; resolver_timeout 3s; upstream backend_wwwsite { zone upstream_dynamic 64k; server www.f3322.net:8080 resolve; } server { listen 80; server_name www.pubyun.com; location / { proxy_pass http://backend_wwwsite; proxy_redirect off; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Connection Close; proxy_set_header X-Forwarded-For $remote_addr; } access_log logs/www.pubyun.com.log; error_log logs/www.pubyun.com.log; } ``` 当访问服务器的根目录时,会把请求转移到后端服务器`www.f3322.net`中。当解析超时后,会依赖`resolver`参数定义的DNS服务器重新进行域名解析,实现动态域名解析。 在此配置中,通过resolver得到的解析结果有效期是30秒。有效期过后,再次访问根目录时就会对域名进行重新解析。 需要注意的是:如果proxy_pass后面是一个域名而不是一个变量,那么对域名的解析也是发生在启动解析期间,无法完成动态域名解析的功能。 ### 相关编译配置 模块地址:https://github.com/GUI/nginx-upstream-dynamic-servers 编译参数: ``` ./configure --add-module=/path/to/nginx-upstream-dynamic-servers make && make install ```
Nathan
Jan. 17, 2022, 4:12 p.m.
转发文档
Collection documents
Last
Next
手机扫码
Copy link
手机扫一扫转发分享
Copy link
Markdown文件
PDF文件
Docx文件
share
link
type
password
Update password