当在 dockerized 应用程序中将 nginx.conf 用作反向代理时,您可以在其中输入哪些值,并且是否必须针对生产部署进行更改?

当在 dockerized 应用程序中将 nginx.conf 用作反向代理时,您可以在其中输入哪些值,并且是否必须针对生产部署进行更改?
upstream loadbalancer {
server 172.17.0.1:5001 weight=6;
server 172.17.0.1:5002 weight=4;
}
server {
location / {
proxy_pass http://loadbalancer;
}}

我们可以在dockerized应用程序中使用172.17.0.1作为IP吗,这个ip指向什么?

另外,我们可以将任何我们想要的内容作为 proxy_pass 吗?我查看了几个配置,似乎确实如此。

https://towardsdatascience.com/sample-load-balancing-solution-with-docker-and-nginx-cf1ffc60e644?gi=924cd636af26

我从那里获得了配置。

version: '3'
services:
app1:
build: ./app1
ports:
- "5001:5000"
app2:
build: ./app2
ports:
- "5002:5000"
nginx:
build: ./nginx
ports:
- "8080:80"
depends_on:
- app1
- app2

似乎您唯一需要正确输入的是端口号,尽管在上面的应用程序中我们似乎将两个请求移植到服务端口 5000 的同一应用程序。因为 5001 和 5002 都重定向到 5000。

答案1

当你启动一个组合堆栈时,docker 会创建一个自定义桥接网络,这些 IP 指的是网络中的端点/应用程序。

也就是说,您不应该依赖 IP 地址。由于您使用的是 Compose,请将它们连接到同一网络,并通过服务名称而不是 IP 来引用服务。您的 Compose 也有不正确的缩进,因此整个配置都是不正确的。

撰写看起来应如下所示:

version: '3'
services:
  app1:
    build: ./app1
    ports:
      - "5001:5000"
    networks:
      - app
  app2:
    build: ./app2
    ports:
      - "5002:5000"
    networks:
      - app:
  nginx:
    build: ./nginx
    ports:
      - "8080:80"
    depends_on:
      - app1
      - app2
    networks: 
      - app:

networks:
  app:

请注意networks将应用程序和 nginx 放在同一网络上的键。现在您可以通过服务名称引用服务,在 nginx 配置中它应该如下所示:

upstream loadbalancer {
  server app1:5001 weight=6;
  server app2:5002 weight=4;
}
server {
  location / {
    proxy_pass http://loadbalancer;
  }
}

相关内容