nginx代理\传递动态主机名部分

nginx代理\传递动态主机名部分,nginx,Nginx,当nginx proxy_pass是通过替换URL中的主机名部分而生成的动态值时,nginx无法代理请求,并出现错误:未定义解析程序来解析服务,其中服务=$1。与其尝试解析service.abcd.local,不如尝试只解析服务。有解决办法吗 location ~ ^/(.*)/(.*)$ { proxy_pass http://$1.abcd.local/$1/$2; } 按照nginx文件的规定: 还可以使用变量指定服务器名称、其端口和传递的URI: proxy_pass htt

当nginx proxy_pass是通过替换URL中的主机名部分而生成的动态值时,nginx无法代理请求,并出现错误:未定义解析程序来解析服务,其中服务=$1。与其尝试解析service.abcd.local,不如尝试只解析服务。有解决办法吗

location ~ ^/(.*)/(.*)$ {
  proxy_pass http://$1.abcd.local/$1/$2;   
}

按照nginx文件的规定:

还可以使用变量指定服务器名称、其端口和传递的URI:

proxy_pass http://$host$uri;
[……]

在这种情况下,将在描述的服务器组中搜索服务器名称,如果未找到,则使用解析程序确定


您是否添加了冲突解决程序(
resolver
指令)?顺便说一句,对于像
/a/b/c/d
这样的url,您的regexp将导致
$1=/a/b/c
$2=d
,代理url将是
http://a/b/c/.abcd.local/....
,nginx尝试解析主机名
a
。Alexey-谢谢。这是正确的。regex错了。修复正则表达式后,尝试解析service.abcd.local仍然失败。如果代理\u pass是硬编码的,因为nginx正在解析并且能够代理。同样,您是否添加了
解析器
?否-是否需要显式解析器?nginx正在amazon VPC中运行,具有*.abcd.local resolving。因此,这意味着如果代理_pass中存在变量,则必须显式指定解析程序?如果主机部件中存在变量,则为是。或者,您必须为所有可能的主机定义服务器组。这就澄清了问题。谢谢