Docker组成的networking混淆了节点

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

我有docker-composeconfiguration

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" ... 

前端是一个NodeJs应用程序的nginx容器。 我们有下一个nginxconfiguration:

 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 /的请求被接收到其他没有指向前端服务的链接部分的服务中。 在我重新启动读取器服务之后,我第一次发生这种情况。 但是,这种情况一再重复,我知道读者还没有重新启动。 CN是什么? 那我以后怎样才能防止这种情况呢?

你应该尝试使用:

 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/