同时在nginx中为两个docker上游服务

时间:2017-07-13 08:25:54

标签: nginx docker-compose

我有一个docker架构,包括一个nginx反向代理,一个rails应用程序和一个swagger-ui图像的实例,我在不同的容器上提供。

我在docker-compose中的设置如下:

web:
  restart: always
  ...

swagger-ui:
  image: swaggerapi/swagger-ui
  ports: 
    - '8080:8080'
  ...

和我的nginx conf文件如下:

upstream web-app {
          server web:80 weight=10 max_fails=3 fail_timeout=30s;
    }

    upstream swagger-ui {
          server swagger-ui:8080 weight=10 max_fails=3 fail_timeout=30s;
    }

    server {
      listen 80;
      listen [::]:80;
      server_name www.servername.de servername.de;
      return 301 https://$server_name$request_uri;
    }

    server {
          listen 443 ssl;
          listen [::]:443 ssl;
          server_name servername.de;
          ssl on;
          ssl_certificate /etc/ssl/cert.pem;
          ssl_certificate_key /etc/ssl/cert.key;
          ssl_protocols TLSv1 TLSv1.1 TLSv1.2;


          location /swagger {
            proxy_pass http://swagger-ui;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Host $host;
            proxy_cache_bypass $http_upgrade;
          }


          location / {
            proxy_pass http://web-app;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection 'upgrade';
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_set_header Host $host;
            proxy_cache_bypass $http_upgrade;

          }

一切都适用于rails应用程序; 我可以通过443端口访问它,没有问题。

我的问题是我也想以同样的方式访问/ swagger / path,但这次访问swagger容器中运行的swagger-ui实例 - 到目前为止我一直在尝试的东西似乎没有工作正常,因为我得到了404 - 我想知道是否我错过了让他们两个同时工作的东西?

如果我暂时将招摇位置设置为/并注释掉网络应用代理,它会正确指向我的swagger-ui容器......

提前多多感谢!

1 个答案:

答案 0 :(得分:1)

你的问题应该通过重写来解决!

现在您尝试加载http://swagger-ui:8080/swagger

之类的网址

所以你应该添加到你的位置:

rewrite    /swagger/(.*) /$1 break;

它会从你的路径中移除/招摇,并且应该加载你需要的东西。