# 如何使用域名访问并自动生成可信的 SSL 证书 如果你想用域名访问你在 HyperApp 里管理的服务器,并且希望用域名来访问你部署的应用,那么可以照此教程操作。下文以 `hyperapp.io` 为例,讲述如何生成 SSL 证书。 ## 配置域名 DNS 1. 建议添加一个二级域名 `A 记录` 指向你的 VPS。比如建一个 `gce-ac.hyperapp.io` 二级域名 `A 记录` 到 你 VPS 的 IP上 `104.155.xx.xx`。 2. 其它的二级域名都 `CNAME` 到 `gce-ac.hypeapp.io`。这样的好处是如果 IP 变了只要改一下 `gce-ac` 的 IP 地址所有其它二级域名也就跟着变了,不用一个个改。 现在你可以 `ping gce-ac.hyperapp.io` 就会显示它的IP,应该和你上面设置的记录一致(如果是新加的二级域名则会马上生效,如果是修改了现有的值则48小时内生效) ## 安装 Nginx 作为 Web 服务器 如果要自动生成域名的 SSL 证书则需要配合 `Nginx Proxy` 和 `Nginx SSL Support` 来进行,因为 LetsEncrypt 需要回访你的域名确认你拥有这个域名的所有权。所以在进行下面的操作前,你需要先将需要生成证书的域名解析到你的服务器上。否则无法验证就不能生成证书。 ![配置Nginx截图](../../images/get-start/nginx-bundle.png "配置 Nginx 和 SSL") ### 安装 Nginx Proxy 1. 前往 `Store` 安装 `Nginx Proxy` 2. 配置页面采用默认的配置分别设定HTTP/HTTPS 端口为80,443 3. `Volumes` 都有默认配置,你可以随意更改 SSL Certs,Config dir,HTML dir的路径,但`Docker Sock` 的值必须为 `docker` 守护进程的socket文件 3. 将 `nginx` 部署到服务器上 *Nginx 会自动监听其它应用里面设置的 `Custom Domain` 值,并自动重启服务* 所以你在新部署 Ghost/WordPress/ownCloud 后以及更改了配置后不用手动重启 `nginx`。 ### 安装 Nginx SSL Support 1. 前往 `Store` 安装 `Nginx SSL Support`。 2. 在设置页面确保几个 `Volumes` 的路径和 `nginx` 的设置一样,并且在下面 `Share Volumes` 中选择 `nginx` 镜像,允许访问 `nginx` 的文件系统 3. 将 `Nginx SSL Support` 部署到同一台服务器上 *Nginx SSL Support 会自动监听其它应用里面 `SSL Support` 相关设置,并自动生成证书*,生成证书的过程会需要几分钟或者十几分钟的时间,在这个过程中你访问 https 会出现 `502 Bad Gateway` 的错误信息,稍等片刻就好。 你可以查看Log获取更多信息,参考上图中最后一个截图。 --- ## 生成 SSL 证书 安装完了 Nginx 下面就可以自动生成 SSL 证书了,如果你要为指定域名生成证书需要进行下面的操作。 1. 如果你只想要证书,而不想配置应用则在商店里任意选择一个应用,推荐 `Apache` 2. 如果你想创建其它应用并自动配置 Nginx 反代则在商店里面选择你想创建的应用 不管你选择了哪一步,则创建应用后在出现的配置界面中,都可以在下面看到一个 `显示 Nginx 和 SSL 选项` 的按钮,打开后可以看到下面两部分的配置: **Custom Domain (自定义域名)** 是配合 nginx 使用的,它告诉 nginx 遇到访问该域名的请求时,把请求转发(反向代理)给当前应用。 * Host: 要反向代理的域名,多个域名用半角逗号隔开(比如我们填入 hyperapp.io) * Port: 这个 Port 是 Ghost 进程监听的 Port,一般情况下并不需要填,因为会自动探测该端口。 * HTTPS: 这个是设置配置了HTTPS后怎么处理 HTTP 请求的,共有四个选项 * 将所有 HTTP 的请求跳转到 HTTPS 上(默认) * 不跳转,让 HTTP 和 HTTPS 并存 * 禁用 HTTP 请求,所有 HTTP 请求将会被丢弃 * 禁用 HTTPS,只保留 HTTP **SSL Support** 配合 `Nginx SSL Support` 使用,当填入一个域名时它会使用 letsencrypt 自动请求并生成该域名的证书。 * Host: 要生成证书的域名(默认会与上面的Nginx Host保持同步,所以如果填了上面的域名,此处会自动输入 hyperapp.io) * Email: (必填) 用来管理域名证书的邮箱。 现在,只要在服务器上安装这个应用就可以了,等安装成功后,稍等两分钟你在浏览器中打开 `https://你的域名` 应该就可以访问了!你也可以查看 `Nginx SSL Support` 的日志,里面会有过程记录。证书生成后会默认保存在 `/srv/docker/certs/` 目录下面(如果你没有改配置的话)。