nginx在proxy_pass里使用变量

nginx server_name 配置文档: http://nginx.org/en/docs/http/server_names.html

在做 nginx 正则表达式 proxy_pass,nginx 反向代理不过去。 比如

1
2
3
4
5
6
7
8
9
server {
listen 80;
server_name ~^(?<user>.+)\.domain\.com$;
location / {
proxy_pass <http://$user.domain1.com>;
}

}

会报出如下错误

no resolver defined to resolve xxx.xxx

web端返回http 502 错误。

在Ngnix中如果用变量作为反向代理的地址时,容易出现“no resolver defined to resolve xxx.xxx”的问题

在 Nginx 0.6.18 后启用了 resolver 指令,在使用变量来构造某个server地址的时候一定要用resolver指令来指定DNS服务器的地址

所以在nginx的配置文件中的http{}部分添加一行resolver 8.8.8.8;

resolver 8.8.8.8;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
server {
listen 80;
server_name ~^(?<user>.+)\.pay\.iov-smart\.net$;

location / {
# set $subdomain "";
# if ($host ~* "^(.+)\.pay\.iov-smart\.net$"){
# set $subdomain $1;
# }

resolver 8.8.8.8;
proxy_pass http://$user.pay.iov-smart.net:6001;
}
}

作者

张巍

发布于

2019-01-29

更新于

2019-01-29

许可协议

评论