docker上的nginx不适用于位置URL

时间:2017-03-24 10:55:52

标签: nginx docker nginx-location

我在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}}它应该有效,但不是。

1 个答案:

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

相关问题