【问题标题】:nginx on docker doesn't work with location URLdocker 上的 nginx 不适用于位置 URL
【发布时间】:2017-03-24 10:55:52
【问题描述】:

我在 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"

但以下配置适用于显示尤里卡页面的http://localhost/

http {
  server {

      location / {
          proxy_pass http://registry:9761;
      }
  }
}

我错过了什么?根据nginx proxy_pass,它应该可以工作,但不是。

【问题讨论】:

  • 两个位置不同,一个将URI /eureka/传递给registry:9761,另一个传递/。在上游传递之前是否需要更改 URI?
  • 我想在nginx后面隐藏多个应用程序。如果在 URI 之后传递了某些内容,则必须传递它,例如/eureka/abc 必须传递给registry:9761/abc

标签: nginx docker nginx-location


【解决方案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 访问其资源。许多应用程序不能强制进入子目录。

【讨论】:

    猜你喜欢
    • 2018-03-09
    • 1970-01-01
    • 2018-08-13
    • 1970-01-01
    • 1970-01-01
    • 2021-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多