本文指导如何谷歌云上创建一个 Nginx 反向代理实例组,用来实现谷歌云 CDN 回源到外部源站。本文的配置主要基于下面架构。



本文档介绍的配置主要分为以下几个部分。


创建配置文件存储桶


创建模板虚机实例


创建自定义镜像


创建实例模板


创建托管实例组


创建负载均衡和 CDN


修改和更新代理配置


创建配置文件存储桶


首先创建一个 Cloud Storage 的存储桶,用来存放代理服务器配置文件。



在本地创建一个名为的配置文件,并上传到存储桶。配置文件的内容如下。注意将回源域名改为实际使用的域名。


server {listen       80;server_name ~^(.+)$;gzip on;gzip_proxied any;location / {access_log /var/log/nginx/upstream.log;add_header Cache-Control "public, max-age=604800";proxy_http_version 1.1;proxy_pass  https://xxx.s3.amazonaws.com/;}}
复制代码


创建模板虚机实例


创建一个 GCE VM 实例,用来制作实例组的模板。



在实例创建完毕后,点击“SSH”按钮登录到虚机命令行。



运行以下命令,安装 gcsfuse。


export GCSFUSE_REPO=gcsfuse-`lsb_release -c -s`echo "deb http://packages.cloud.google.com/apt $GCSFUSE_REPO main" | sudo tee /etc/apt/sources.list.d/gcsfuse.listcurl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -sudo apt-get updatesudo apt-get install gcsfuse
复制代码


修改/etc/fuse.conf,将”user_allow_other”前面的注释符去掉。



运行下面命令,将之前创建的存放配置文件的存储桶挂载到本地目录。


mkdir ~/gcsgcsfuse -o allow_other cdn-proxy-config /home/eugeneyu/gcs
复制代码


运行下面命令,确认可以访问到存储桶上的配置文件。



运行下面命令,将可使用的文件句柄上限提高。


sudo su -ulimit -n 99999echo "fs.file-max=99999" >> /etc/sysctl.confecho "* soft nofile 99999" >> /etc/security/limits.confecho "* hard nofile 99999" >> /etc/security/limits.confexit
复制代码


运行以下命令,安装 Nginx 服务。


sudo apt-get updatesudo apt-get install -y nginx
复制代码


sudo apt-get update


sudo apt-get install -y nginx


修改 Nginx 的主配置文件/etc/nginx/nginx.conf,增加最大连接数,并将反向代理配置文件导入。




运行下面命令重启 Nginx


sudo service nginx restart
复制代码


测试 Nginx 代理访问源站资源是否成功。请将下面地址中的 IP 替换成 Nginx 服务器的公网 IP,将文件路径替换成源站测试文件的路径。


curl -X GET http://35.198.234.55/do_not_delete/test.txt
复制代码


创建自定义镜像


基于 Nginx 服务器系统盘创建自定义镜像。



创建实例模板


镜像创建好后,创建一个 Instance Template。修改以下配置。


  1. “Machine type”根据需要选择2 vCPUs 或者4 vCPUs 机型。

  2. 修改“Boot disk”配置,选择刚刚创建好的镜像。

  3. “Firewall”勾选”Allow HTTP traffic”和”Allow HTTPS traffic”

  4. “Networking”中的“Network tags”填写“cdn-proxy”

  5. Management 中的 Startup script 中填入以下内容,确保新实例启动时自动挂载配置文件存储桶,并增加文件句柄上限。


配置好后,点击“Create”按钮创建模板。


创建托管实例组


创建实例组。修改以下配置。


  1. Location 选择 Multiple zones

  2. Region 选择离源站最近的区域,比如新加坡为 asia-southeast1

  3. Instance template 选择上一步创建好的模板

  4. Minimum number of instances 根据预估用量选择机器数量,比如5000 QPS 可以选择5台

  5. Health check 创建一个80端口的健康检查,各项配置采用默认值


配置好后,点击“Create”按钮创建实例组。


创建负载均衡和 CDN


  1. 选择 HTTP(S) Load Balancing

  2. Backend Configuration选择Create a backend service

  3. 在新建的 Backend service 配置中选择之前创建的 Instance group,勾选“Enable Cloud CDN”,并选择之前创建的 HTTP 健康检查。

  4. 在 Frontend configuration 中的 IP address 选择 Create IP address,创建一个固定公网地址用于 CDN 前端访问地址。


配置好后,点击“Create”按钮创建负载均衡和 CDN。


负载均衡和 CDN 大概需要15-20分钟初始化。之后可以访问相关文件进行测试。


修改和更新代理配置


如果源站域名等配置需要修改,可以更新 Nginx 代理配置,重新上传到配置存储桶覆盖之前文件,并用以下脚本将实例组中所有实例的 Nginx 运行 reload 更新配置。


#!/bin/bash# Example: ./nginx_reload.sh mig_nginxmig_nginx='mig-cdn-proxy-india-v8'region=asia-south1if [ "$1" != "" ]; thenmig_nginx=$1fiinstance_array=( $(gcloud compute instance-groups list-instances --region=$region $mig_nginx | cut -d" " -f1) )total_instances=$(expr ${#instance_array[@]} - 1)if [ ${#instance_array[@]} -eq 0 ]; thenecho "Instance Group doesn't exist or is empty!"exitelseecho "Instance Group has $total_instances instances"fifor (( i=1; i<=$(( ${#instance_array[@]} )) - 1; i++ ))doecho -n "Reload Nginx config file on ${instance_array[i]}..."gcloud compute ssh ${instance_array[i]} --command="sudo service nginx reload"doneecho -e 'Done!'
复制代码


文章版权归作者所有,未经许可不得转载。


相关推荐