nginx使用域名方式访问RS的一些方案整理:
proxy_pass 直接放域名无upstream
| |
- 没有uptream配置;无法配置相关负载策略;
- 系统启动成功,域名解析成功后相关解析IP信息不会更新;
- 域名解析过程是在nginx启动时proxy_pass命令解析时完成,依赖系统DNS服务。如果解析失败, 无法启动重新加载。
Upstream中直接使用域名
| |
- 域名解析过程是在nginx启动时upstream server命令解析时完成, IP列表保存;
- 系统启动成功,域名解析成功后相关解析IP列表信息不会更新;
- 依赖系统DNS服务。如果解析失败, 无法启动重新加载;
proxy_pass结合通过变量方式
| |
- 使用resolver命令设置的域名服务器,通过valid设置DNS信息有效时间;
- 解析失败不影响nginx服务启动。
开源版本总结:
- Nginx配置中使用域名只有在nginx启动时完成地址解析, 获取DNS解析后的地址列表。
- Nginx开源版本中可以通过proxy_pass , server(upstream)配置命令中使用域名均命令nginx启动的命令解析阶段进行,解析错误将导致无法启动、无法重新加载。
- Proxy_pass + resovle解决了这个问题,但是不使用upstream无法实现现有的多server配置。
其他解决方案
Nginx plus
| |
- 商业版本支持在现有的server命中增加 resolve参数支持的域名解析
- 可以通过zone 指令共享配置。
Dynamic Configuration of Upstreams with the NGINX Plus API | NGINX Plus
nginx-upstream-dynamic-servers
| |
功能类似nginx plus 但是时间比较老,只支持1.9以前版本。
ngx_http_upstream_dynamic_module-Tengine
| |
支持域名解析定期更新, 由于没有修改server启动和重载时如果域名解析失败,会导致start reload失败。
ngx_http_upstream_dynamic_module - The Tengine Web Server (taobao.org)
图片from陳丁光