nginx 代理:将 ${host} 添加到代理网址

nginx 代理:将 ${host} 添加到代理网址

我需要nginx-1.6.2在多名称虚拟主机中用作反向代理,其中实际host名称(由客户端报告)成为代理 URL 的一部分。

基本上我想做一个映射

  • http://example.com/test/foo/bar->http://backend.local:8000/example.com/portal/foo/bar
  • http://test.example.com/test/ping/pong->http://backend.local:8000/test.example.com/portal/ping/pong

我尝试在指令中${http_host}使用:${host}proxy_pass

server {
    server_name example.com *.example.com;
    listen 80;
    location /test {
        proxy_pass http://backend.local:8000/${host}/portal/
    }
}

502: Bad Gateway但是当我访问例如时,会出现错误。http://example.com/test/fnurz

如果我${host}用固定字符串(例如example.com)替换,它会按预期工作,但显然代理母鸡对http://example.com/test/fnurz和都获得相同的 URL http://x.example.com/test/fnurz,这正是我试图避免的。

答案1

仔细检查了调试日志后,发现 nginx 无法解决主机backend.local名。

添加一行:

resolver 192.168.144.120; # IP of the local DNS server

解决了这个问题。

然而,我不清楚为什么 nginx 无法解析proxy_pass 一个变量,当它成功时没有任何变量。

相关内容