为通过 nginx 和 GitHub 页面静态页面路由的多个网络服务设置 SSL 证书

Setting up an SSL certificate for multiple webservices routed through nginx and a GitHub pages static page

好吧,我 运行 遇到了一个完全超出我的专业知识或领域的情况。所以这是我的问题。

我在 3 public 个 IP 地址上部署了 3 个 Web 服务(作为 docker 个容器)。它们被称为 hackalistcore-apicms。现在,我想重定向其中三个 http://wolfbeacon.com/api/core , http://wolfbeacon.com/api/hackalist and http://wolfbeacon.com/cms(基本上是 3 个不同的端点)。

因此,出于这个目的,我假设我必须设置一个 nginx 服务器来将这些客户端请求委托给容器 IP。这是有道理的,我已经在本地完成了。

现在,我有我们的主要网站,http://wolfbeacon.com 通过 GitHub 页面托管。

问题:为它们全部设置 SSL 证书。他们所有人和未来的网络服务的一个证书。我该怎么做呢?

nginx 是 反向代理 服务器,事实上,这正是您所需要的。

但是,GitHub 页面不允许您配置它们的反向代理,它也不支持自定义域的 SSL:

HTTPS is not supported for GitHub Pages using custom domains.

引自https://help.github.com/articles/securing-your-github-pages-site-with-https/

因此,为了实现您的目标,您必须在 GitHub 页面 所有 Web 服务之前设置自己的服务器。我会把它命名为 balancer.

然后您在此 balancer 上安装 nginx 并将其设置为为您的主域(在您的示例中为 wolfbeacon-dot-com)提供响应并(可选)为 SSL 提供服务。您还必须将您域的名称服务器委派给此 balancer

然后您可以指向 真实的 GitHub 网页 URL URL 您的 balancer 中的网站(如 example.github.io) ]s proxy_pass 指令。

假设 example.github.io 作为您网站静态内容的主要部署,example.org 作为您所有内容和服务的首页,然后您从与以下略微类似的配置开始:

server {
  server_name example.org;

  listen 80 default_server;
  listen [::]:80 default_server;

  location / {
    proxy_pass       https://example.github.io;
  }

  location /api/core {
    proxy_pass       http://{PUT_HERE_IP_ADDRESS_OF_YOUR_core-api_SERVICE}/
  }

  location /api/hackalist {
    proxy_pass       http://{PUT_HERE_IP_ADDRESS_OF_YOUR_hackalist_SERVICE}/
  }

  location /api/cms {
    proxy_pass       http://{PUT_HERE_IP_ADDRESS_OF_YOUR_cms_SERVICE}/
  }
}

一旦您确定您的 nginx 正在为您的 .com 提供服务,请继续使用 listen 443 指令和一些额外的指令来增强此配置,以便通过 SSL 提供服务。

https://www.digitalocean.com/community/tutorials/how-to-secure-nginx-with-let-s-encrypt-on-ubuntu-16-04 咨询有关如何配置 nginx 以从头开始通过 SSL 服务的后续指导。