详解proxy_pass、upstream与resolver

匿名 (未验证) 提交于 2019-12-03 00:13:02

应用场景

这里列举几个应用场景,下文会针对这几个场景并结合代码进行分析。

1:proxy_pass + upstream

 upstream foo.example.com {         server 127.0.0.1:8001;     }      server {         listen       80;         server_name  localhost;          location /foo {                 #匹配/foo结尾的域名             proxy_pass http://foo.example.com;     #反向代理到foo.example.com
  } }

访问http://localhost/foo时,proxy模块会将请求转发到127.0.0.1的8001端口上。

2:只有proxy_pass,没有upstream与resolver

server {         listen       80;         server_name  localhost;          location /foo {             proxy_pass http://foo.example.com;         }     }

实际上是隐式创建了upstream,upstream名字就是foo.example.com。upstream模块利用本机设置的DNS服务器(或/etc/hosts),将foo.example.com解析成IP,访问http://localhost/foo,proxy模块会将请求转发到解析后的IP上。

如果本机未设置DNS服务器,或者DNS服务器无法解析域名,则nginx启动时会报类似如下错误:

nginx: [emerg] host not found in upstream "foo.example.com" in /path/nginx/conf/nginx.conf:110

3:proxy_pass + resolver(变量设置域名)

server {         listen       80;         server_name  localhost;          resolver 114.114.114.114;         location /foo {             set $foo foo.example.com;             proxy_pass http://$foo;         }     }

访问http://localhost/foo,nginx会动态利用resolver设置的DNS服务器(本机设置的DNS服务器或/etc/hosts无效),将域名解析成IP,proxy模块会将请求转发到解析后的IP上

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!