Nginx 动态DNS反向代理的几种方式

258次阅读

共计 1816 个字符,预计需要花费 5 分钟才能阅读完成。

第一种方式:域名 server {… proxy_pass http://dev.foxchan.com:10086; …} 缺点:如果 ip 发生变化,此处 Nginx 就无法反向代理了,必须重启一次 Nginx 才行。原因:Nginx 在第一次解析域名后,会缓存该域名的信息,并且不会主动更新

第二种方式:resolver 配合 set server {… resolver 127.0.0.1 valid=5 ipv6=off; set $BACkend “http://dev.foxchan.com:10086”; proxy_pass $BACkend; …} 优点:用 set 设置一个变量,通过 resolver 实现每次访问都解析新的 ip 地址, 解决了 ip 地址缓存的问题。resolver 可以设置多个公共 DNS,也可以设置自建 dns 加速解析 valid 单位是 s,表示间隔多久更新 dns 解析 ipv6 nginx 从 1.11.5 开始自动启用了 ipv6,resolver 就会同时查询 IPv4 和 IPv6 的 DNS 记录,如果没有 ipv6 的 记录,需要手动关闭

第三种方式:模块 ngx_upstream_jdomain http {resolver 127.0.0.1; resolver_timeout 10s; upstream test { jdomain www.foxchan.com port=8080 interval=10; #指定域名和端口,每隔 10 秒进行一次解析 server 127.0.0.1:5555 BACkup;} server {listen 8888; LOCATIOn / { proxy_pass http://test;} } server {listen 5555; return 502 ‘Panic!’;} } 注意:通过这种方式代理到后端的服务,后端服务接收到的 $host 的值即为 test,如果后端服务以主机头的方式来接受服务,这显然是不能接受的。所以在代理配置中,必须加上如下配置以将主机头传递给后端服务器:proxy_set_header Host $host;

第四种方式:TENGIne 使用淘宝的 TENGIne 模块,ngx_http_upstream_dynamic_module@H_502_9@ upstream BACkend {dynamic_resolve fallBACk=stale fail_timeout=30s; server a.com; server b.com;} server {… LOCATIOn / { proxy_pass http://BACkend;} }fallBACk 参数指定了当域名无法解析时采取的动作:@H_502_9@stale 使用 tENGIne 启动的时候获取的旧地址 @H_502_9@next 选择 upstream 中的下一个 server@H_502_9@shutdown 结束当前请求 @H_502_9@fail_timeout 指定了将 DNS 服务当做无法使用的时间,也就是当某次 DNS 请求失败后,假定后续多长的时间内 DNS 服务依然不可用,以减少对无效 DNS 的查询。@H_502_9@

第五种方式:Nginx Plus 有 2 种方式通过 dns 做服务发现 @H_502_9@A 记录 @H_502_9@ resolver 10.0.0.2 valid=10s; upstream BACkends {zone BACkends 64k; server BACkends.example.com:8080 resolve;} server {LOCATIOn / { proxy_pass http://BACkends;} }SRV 记录 @H_502_9@ resolver 10.0.0.2 valid=10s; upstream BACkends {zone BACkends 64k; server BACkends.example.com service=_http._tcp resolve;} server {LOCATIOn / { proxy_pass http://BACkends;} } 官方文档:https://www.nginx.com/blog/dns-service-discovery-nginx-plus/@H_502_9@漏洞:高危漏洞 CVE-2021-23017@H_502_9@此漏洞存在于 Nginx 的 DNS 解析模块,并且仅在配置文件中使用 ”resolver” 指令时才会影响 Nginx。*** 者可以利用该漏洞进行远程 DDoS ***,甚至远程执行。

正文完
 0