【问题标题】:How to use ngnix to route requests to different docker containers?如何使用 nginx 将请求路由到不同的 docker 容器?
【发布时间】:2020-06-21 19:28:42
【问题描述】:

我有两个容器 -

  1. 命名 abc 在端口 3000 上运行
  2. 名为 xyz 在端口 5000 上运行

我的主机上运行着 nginx。当我输入时我想要那个 -

domain.com/abc/ --- 它应该去 abc:3000 domain.com/xyz/ --- 它应该去 xyz:5000

如何解决这个问题?

【问题讨论】:

  • 不知道为什么人们不赞成这个。我猜这对他们来说太容易了。然而,该职位仍然没有可行的解决方案。大声笑

标签: docker nginx containers


【解决方案1】:
If you are using ingress then you can use 

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: dspace
  namespace: testing
spec:
  rules:
  - host: domain.com
http:
  paths:
  - path: /abc
    backend:
      serviceName: myapp
      servicePort: 3000
  - path: /xyz
    backend:
      serviceName: myapp
      servicePort: 5000

【讨论】:

【解决方案2】:

您的问题需要更正,您的路线完全一样。无论如何,您可以在 nginx 中配置 default.conf 文件:

upstream server1{
  server 172.17.0.4:80;
}
upstream server2{
  server 172.17.0.4:90;
}

server {
  listen 8001;

  location / {
        proxy_pass http://server1;
  }

  location /static/ {
        proxy_pass http://server2;
  }
}

如果你想使用容器的名称:

upstream client {
    server client:3000;   // < -- Name of container defined in DOCKER COMPOSE
}

upstream api {
    server api:5000;   // < -- Name of container defined in DOCKER COMPOSE
}

server{
    listen 80;
    
    location / {
        proxy_pass http://client;
    }
    
    location /sockjs-node {
        proxy_pass http://client;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";
    }
    
    location /api {
        rewrite /api/(.*) /$1 break;
        proxy_pass http://api;
    }
}

【讨论】:

  • 我注意到每次容器构建和运行时 IP 都会不断变化。有没有可以使用容器名称的解决方案?
  • js 文件路径没有被改变。我在端口 5000 上有一个反应应用程序。它试图找到 domain.com/main.js 它应该是 domain.com:5000/main.js
猜你喜欢
  • 1970-01-01
  • 2021-07-08
  • 2017-01-23
  • 1970-01-01
  • 2021-07-02
  • 1970-01-01
  • 2017-01-26
  • 2014-05-05
  • 1970-01-01
相关资源
最近更新 更多