【问题标题】:Server setup: Subdomain or different port for API and single or multiple ssl certificates for a docker, nginx, web and api setup?服务器设置:API 的子域或不同端口以及 docker、nginx、web 和 api 设置的单个或多个 ssl 证书?
【发布时间】:2016-01-16 22:03:06
【问题描述】:

我将digital oceanubuntu 15.10 一起用于我的server。我有三个docker containersnginxweb(用于angular 2 应用程序)和rails 用于rails API

我打算设置nginx配置文件如下:

port 443proxy passednginx 到我的web 应用程序。

在那之后,我对如何允许外部访问 rails api 有点困惑?我是否应该通过subdomain 访问rails api,如果可以,如何访问?还是应该只使用与web 应用程序相同的域,尽管使用不同的port

下一个问题是我是否需要一个ssl certificate 用于与nginx 层连接的外部世界?还是我需要一个ssl certificate 来给web application 和一个ssl certificate 来给rails api

【问题讨论】:

    标签: ubuntu ssl nginx docker digital-ocean


    【解决方案1】:

    您可以将 nginx 用作两个端点的负载均衡器。这样的事情应该没问题:

    upstream web {
        server webcontainer1:8080;
        server webcontainer2:8080;
    }
    
    upstream api {
        server apicontainer1:5000;
        server apicontainer2:5000;
    }
    
    server {
        <your_server_directives>
        ...
    
        location /api {
            proxy_pass http://api;
        }
    
        location / {
            proxy_pass http://web;
        }
    }
    

    你也可以用一个单独的 nginx 做一个子域。在这种情况下,您将设置另一个 server 指令并在同一端口或另一个 API 特定端口上进行虚拟托管,例如:

    upstream api {
        server apicontainer1:5000;
        server apicontainer2:5000;
    }
    
    server {
        listen 5500;
        server_name api.mydomain.com;
    
        location /api {
            proxy_pass http://api;
        }
    }
    

    在第一种情况下,是的,您可以只使用一个 SSL 证书,因为 API 和 Web 将位于一个端口(一个域名)上。在第二种情况下,您需要一个或两个通配符证书,一个用于您的主 Web (yourdomain.com) 和 api (api.yourdomain.com)。

    另外值得注意的是,第二种情况可能会遇到烦人的 CSRF 问题,因为 SSL 页面通常不允许当前域之外的 XHR 请求。因此,您可以为 API 创建第二个子域,但您可能最终需要在 nginx 配置中使用第三个代理来代理 yourdomain.com/apiapi.yourdomain.com

    【讨论】:

      猜你喜欢
      • 2018-11-08
      • 2017-04-19
      • 1970-01-01
      • 2019-12-20
      • 2015-05-31
      • 2018-11-11
      • 1970-01-01
      • 1970-01-01
      • 2018-02-10
      相关资源
      最近更新 更多