Nginx URI路径端口重定向Docker的意外行为

时间:2018-04-06 12:43:58

标签: docker nginx

我在端口8080上部署了一个Docker容器。 我将我的nginx服务器配置为指向nginx.config中的端口8080,如下所示:

server {
   ...
   location / {
     proxy_pass http://127.0.0.1:8080;
   }
   ...

这很好,并且对服务器的调用被重定向到docker容器。

我现在需要将不同的URI路径指向不同的容器。 例如,我需要/ service1路径指向我原来的docker容器。所以我这样做了:

server {
   ...
   location / {
   }

   location /service1 {
     proxy_pass http://127.0.0.1:8080;
   }

我在此处遵循本指南:https://gist.github.com/soheilhy/8b94347ff8336d971ad0#step-5----add-blog-and-mail

我做了nginx -s重新加载并重新启动但是当我导航到{IP_ADDRESS} / service1时出现Whitelabel错误。 Canńot理解这一点。

是否与位置/ {}是emtpy有关?

修改

根据建议我在8090上重新聚合了我的容器,并将nginx.config文件更改为:

server {
   ...
   location / {
      proxy_pass http://127.0.0.1:8080;
   }

   location /service1 {
     proxy_pass http://127.0.0.1:8090;
   }

当我将HTTP发送到[IP_ADDRESS] / service1时,我仍然得到404。

EDIT2

正如所建议的,我更改了nginx.conf文件以避免将“service1”传递给容器,但错误响应表明它仍然收到它。

nginx.conf:

location / {
}

location = /service1 {
    return 302 /service1/;
}

location /service1/ {
    proxy_pass http://127.0.0.1:8090;
}

错误:

{
   "timestamp": "2018-04-07T09:56:44.600+0000",
   "status": 404,
   "error": "Not Found",
   "message": "No message available",
   "path": "/service1/image"
}

为了清楚起见,这个错误是由Docker而不是Ngnix生成的,所以重定向工作正常吗?

1 个答案:

答案 0 :(得分:1)

问题可能是/service1路径传递给您的容器,然后用404响应,因为它不知道如何处理它。

请尝试从路径中删除/service1的以下内容:

location = /service1 {
    return 302 /service1/;
}

location /service1/ {
    proxy_pass http://127.0.0.1:8090/;
}

请注意,尾部斜杠很重要,必须遵守。