我在docker中运行nginx,充当多个应用程序的反向代理。例如,
http://localhost/eureka/ will show http://registry:8761
http://localhost/zipkin/ will show http://zipkin:9411
我开始关注nginx conf,
http {
server {
location /eureka/ {
proxy_pass http://registry:9761;
}
}
}
以上配置无效,nginx抛出错误为
proxy | 172.20.0.1 - - [24/Mar/2017:10:46:28 +0000] "GET /eureka/ HTTP/1.1" 404 0 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.110 Safari/537.36"
但是下面的配置适用于显示eureka页面的http://localhost/。
http {
server {
location / {
proxy_pass http://registry:9761;
}
}
}
我缺少什么?根据{{3}}它应该有效,但不是。
答案 0 :(得分:1)
proxy_pass
指令可以选择在上游传递之前修改URI。要删除/eureka/
前缀,只需将URI /
附加到proxy_pass
语句。
例如:
location /eureka/ {
proxy_pass http://registry:9761/;
}
URI /eureka/foo
将映射到http://registry:9761/foo
。有关详情,请参阅this document。
当然,这只是问题的一半。在许多情况下,上游应用程序必须使用正确的前缀或路径相对URI来访问其资源。许多应用程序不能强制进入子目录。