docker 上的 nginx 不适用于位置 URL
nginx on docker doesn't work with location URL
我运行nginx在docker充当多个应用的反向代理。例如,
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"
但下面的配置适用于 http://localhost/ 显示尤里卡页面。
http {
server {
location / {
proxy_pass http://registry:9761;
}
}
}
我错过了什么?根据 nginx proxy_pass 它应该工作,但它不是。
proxy_pass
指令可以在向上游传递之前选择性地修改 URI。要删除 /eureka/
前缀,只需将 URI /
附加到 proxy_pass
语句即可。
例如:
location /eureka/ {
proxy_pass http://registry:9761/;
}
URI /eureka/foo
将映射到 http://registry:9761/foo
。有关更多信息,请参阅 this document。
当然,这只是问题的一半。在许多情况下,上游应用程序必须使用正确的前缀或路径相对 URI 来访问其资源。许多应用程序无法强制进入子目录。
我运行nginx在docker充当多个应用的反向代理。例如,
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"
但下面的配置适用于 http://localhost/ 显示尤里卡页面。
http {
server {
location / {
proxy_pass http://registry:9761;
}
}
}
我错过了什么?根据 nginx proxy_pass 它应该工作,但它不是。
proxy_pass
指令可以在向上游传递之前选择性地修改 URI。要删除 /eureka/
前缀,只需将 URI /
附加到 proxy_pass
语句即可。
例如:
location /eureka/ {
proxy_pass http://registry:9761/;
}
URI /eureka/foo
将映射到 http://registry:9761/foo
。有关更多信息,请参阅 this document。
当然,这只是问题的一半。在许多情况下,上游应用程序必须使用正确的前缀或路径相对 URI 来访问其资源。许多应用程序无法强制进入子目录。