文 / Google Cloud 技术工程师 于有志
2 月 27 日 15:00-16:00,Google Cloud 技术工程师吴斌将面向开发者进行线上直播培训课程,为您解读如何借助 Google Cloud 强大的云端服务,让数据驱动决策?可在次条预约观看直播。
本文的配置主要基于下面架构:
修改和更新代理配置
创建配置文件存储桶
首先创建一个 Cloud Storage 的存储桶,用来存放代理服务器配置文件。
在本地创建一个名为 nginx-proxy-config.conf 的配置文件,并上传到存储桶。配置文件的内容如下,注意将回源域名改为实际使用的域名:
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.list
curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
sudo apt-get update
sudo apt-get install gcsfuse
修改 /etc/fuse.conf,将”user_allow_other”前面的注释符去掉。
运行下面的命令,将之前创建的存放配置文件的存储桶挂载到本地目录。
mkdir ~/gcs
gcsfuse -o allow_other cdn-proxy-config /home/eugeneyu/gcs
运行下面的命令,确认可以访问到存储桶上的配置文件。
运行下面命令,将可使用的文件句柄上限提高。
sudo su -
ulimit -n 99999
echo "fs.file-max=99999" >> /etc/sysctl.conf
echo "* soft nofile 99999" >> /etc/security/limits.conf
echo "* hard nofile 99999" >> /etc/security/limits.conf
exit
运行以下命令,安装 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 服务器系统盘创建自定义镜像。
创建实例模板
5. Management 中的 Startup script 中填入以下内容,确保新实例启动时自动挂载配置文件存储桶,并增加文件句柄上限。
配置好后,点击“Create”按钮创建模板。
创建托管实例组
创建实例组。修改以下配置。
Health check 创建一个 80 端口的健康检查,各项配置采用默认值
配置好后,点击“Create”按钮创建实例组。
创建负载均衡和 CDN
选择 HTTP(S) Load Balancing
Backend Configuration 选择 Create a backend service
在新建的 Backend service 配置中选择之前创建的 Instance group,勾选“Enable Cloud CDN”,并选择之前创建的 HTTP 健康检查。
在 Frontend configuration 中的 IP address 选择 Create IP address,创建一个固定公网地址用于 CDN 前端访问地址。
配置好后,点击“Create”按钮创建负载均衡和 CDN。
负载均衡和 CDN 大概需要 15-20 分钟初始化。之后可以访问相关文件进行测试。
修改和更新代理配置
如果源站域名等配置需要修改,可以更新 Nginx 代理配置,重新上传到配置存储桶覆盖之前文件,并用以下脚本将实例组中所有实例的 Nginx 运行 reload 更新配置。
#!/bin/bash
# Example: ./nginx_reload.sh mig_nginx
mig_nginx='mig-cdn-proxy-india-v8'
region=asia-south1
if [ "$1" != "" ]; then
mig_nginx=$1
fi
instance_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 ]; then
echo "Instance Group doesn't exist or is empty!"
exit
else
echo "Instance Group has $total_instances instances"
fi
for (( i=1; i<=$(( ${#instance_array[@]} )) - 1; i++ ))
do
echo -n "Reload Nginx config file on ${instance_array[i]}..."
gcloud compute ssh ${instance_array[i]} --command="sudo service nginx reload"
done
echo -e '\nDone!'