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 来访问其资源。许多应用程序无法强制进入子目录。