Google Cloud CDN 部署 HTTP 跳转 HTTPS

默认分类 2018-06-15 22:42 暂无评论

Google Cloud 目前注册验证通过信用卡还是有 $300 赠送免费使用一年的。

Google Cloud 的基础网络真的没得说。CDN 也非常的快,全球 ping 值都非常低,就是流量略贵。

首先使用 Google Cloud CDN 与传统的 CDN 使用方式不一样。现在大部分的 CDN 都是通过 CNAME 解析的,Google Cloud CDN 是以 GCE 为基础建立一个 Anycast 网络,在使用 Google Cloud CDN 前,你必须保证最少创建了一个 GCE 实例,否则无法成功使用 Google Cloud CDN 服务!

GCE 上所实现的这个功能是基于第七层的网络代理,所以其拓扑图是这样的:

用户 -- 边缘服务器 -- 实例

  1. 用户到边缘服务器之间的连接:使用 HTTP 或 HTTPS;如果是 HTTPS 连接,那么 TLS 加密过程是在边缘服务器上实现。
  2. 边缘服务器到实例的连接:使用 HTTP 或 HTTPS 连接,之前的网络是走的 Google 的专线。

不论配置了几个位置的实例,边缘服务器都是使用 Google 全部的边缘服务器。

启用这个功能后,就会得到另一个 Anycast 的 IP 地址,这是个独享的 IP 地址。

首先需要创建一个实例组,实例组最少存在一台 VM 实例,否则无法创建。
创建 GCE 实例组

创建实例租需要注意,如果确定你的流量负载并不高,请选择非托管实例组,否则 Google Cloud 将会在你的 VM 实例负载达到一定载荷时为你创建新的 VM 加入实例组,或者动态调度保证高可用。

在控制台中找到网络服务选择负载均衡创建一个负载均衡器,如果你需要 TCP/UDP 请了解 Google Cloud 文档。
创建 HTTP(S) 负载均衡

配置后端的时候需要注意 VM 实例中已创建所需服务,如 80/443 的 HTTP(S) 服务,避免运行状况检查检查到系统未正常运作。
创建后端服务

创建后端服务的时候留意选择协议,一般这里选择 HTTP 即可,实例组处选择刚刚创建好的实例组,端口号默认即可。如果协议处更改为 HTTPS 新后端的实例组端口也会相对应的更改。
创建后端服务

配置运行状况检查需要注意选择协议与后端服务中的协议对应,否则检测异常,如果没有特殊需求,代理协议处最好留空。
运行状况检查

如果需要现在开启 Cloud CDN 可以选择启用。如果暂时不需要可以随时开启。创建完成后,如果没有特殊需求路径规则等,可以直接掠过第二步,进行前端配置,如果需要 HTTPS 需要上传你的证书密钥,这是必须的,否则 HTTPS 将会报错。IP 地址将会随机分配一个地址,如果你需要一个固定的 IP 地址请选择创建。前端配置完成后创建负载均衡器即可。
前端配置

如果你需要创建 HTTPS 并且需要 HTTP 强制跳转到 HTTPS 的话,创建一个 IP 地址使必须的!!这里必须要注意!

如果你有多个实例组,并且分布在各个 Google Cloud 骨干机房,可以在创建后端服务的时候选择多个实例组组合使用。

接下来将域名解析至前端 IP 即可。由于我需要 HTTP 跳转到 HTTPS 所以需要两个前端服务,如果你需要的话,创建一个 80 端口和 443 端口 HTTP/HTTPS 协议的前端服务即可。
负载均衡器详情

使用 Google Cloud CDN 有一个问题很难受,就是如何 HTTP 跳转到 HTTPS。一般在 Nginx 上配置都是判断 http 然后跳转到 https,但是在 Google Cloud CDN 的食用方式不一样~

一般 Nginx 都是:

#1 method 1
server {
    listen 80;
    listen 443 ssl http2;
    server_name www.domain.com;
    if ($schema = 'http') {
        return 301 https://$host$request_uri;
    }
}

#2 method 2
server {
    listen 80;
    server_name www.domain.com;
    return 301 https://$host$request_uri;
}
server {
    listen 443 ssl http2;
    server_name www.domain.com;
    location / {
        ...
    }
}

但是在 Google Cloud 创建了 VM 后要做跳转需要把规则改一改即可强制跳转至 HTTPS

server {
    listen 80;
    listen 443 ssl http2;
    server_name www.domain.com;
    if ($http_x_forwarded_proto = 'http') {
        return 301 https://$host$request_uri;
    }
}
暂无评论