我需要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
和一个变量,当它成功时没有任何变量。