【发布时间】:2016-05-10 10:51:17
【问题描述】:
当 nginx proxy_pass 是期望通过替换 URL 中的主机名部分来构建的动态值时,nginx 无法代理请求并出现错误:no resolver defined to resolve service where 服务=$1。与其尝试解析 service.abcd.local,不如尝试解析 service。有解决办法吗?
location ~ ^/(.*)/(.*)$ {
proxy_pass http://$1.abcd.local/$1/$2;
}
【问题讨论】:
-
您是否添加了解析器(
resolver指令)? -
顺便说一句,对于像
/a/b/c/d这样的url,你的正则表达式将导致$1 = /a/b/c,$2 = d,并且代理url将是http://a/b/c/.abcd.local/....,而nginx绝对正确尝试解析主机名a. -
阿列克谢 - 谢谢。那是对的。正则表达式是错误的。修复正则表达式后,仍然无法尝试解析 service.abcd.local。如果 proxy_pass 被硬编码为 service.abcd.local nginx 正在解析并且能够代理。
-
再一次,你添加
resolver了吗? -
否 - 是否需要显式解析器? nginx 正在亚马逊 VPC 中运行,解析为 *.abcd.local。
标签: nginx