Docker组成网络混淆了节点

时间:2017-12-03 14:50:16

标签: docker nginx docker-compose docker-networking

有时nginx服务器会将请求转发给错误的docker-compose服务。

我有docker-compose config

version: "3.0"
services:
  proj-reader:
    image: repositry:5000/my-company.com/proj-reader
    ports:
      - "28090:8080"
      - "28095:5005"
  proj-helpdesk:
    image: repository:5000/my-company.com/proj-helpdesk
    ports:
      - "29080:8080"
      - "29085:5005"
  proj-frontend:
    image: repository:5000/my-company.com/proj-frontend
    ports:
      - "80:80"
    links:
      - "proj-helpdesk:backend"
      - "proj-reader:reader"
...

Frontend是一个带有NodeJs应用程序的nginx容器。我们有下一个nginx配置:

upstream backend {
    server backend:8080;
    keepalive 30;
}

upstream reader {
    server reader:8080;
    keepalive 30;
}

server {
    listen     80;
    client_max_body_size 2m;
    server_name  localhost;
    root   /usr/share/nginx/html;

    location /api/ {
        proxy_set_header    Host $host;
        proxy_set_header    X-Real-IP $remote_addr;
        proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass          http://backend;
        proxy_read_timeout   600;
    }

    location /web-callback/ {
        proxy_set_header    Host $host;
        proxy_set_header    X-Real-IP $remote_addr;
        proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass          http://reader;
    }

}

有时我可以看到/ web-callback /的请求在其他服务中收到,而这些服务并没有在前端服务的链接部分中指出。在我重新启动阅读器服务之后,我第一次发生这种情况。但是,这种情况一再发生,我知道读者还没有重新启动。 它是什么?我怎么能在将来阻止这种情况?

1 个答案:

答案 0 :(得分:0)

你应该尝试使用:

location ^~ /api/ {
  # Queries beginning with /api/ and then stops searching.
}

location ^~ /web-callback/ {
  # Queries beginning with /web-callback/ and then stops searching.
}

https://www.keycdn.com/support/nginx-location-directive/