目标说明:将香港VPS作为网站/应用源站,通过合理的DNS与CDN配置,让位于美国的用户访问时更稳定、更快。
关键思路:使用全球Anycast/POP的CDN做前端,DNS做智能解析(GeoDNS或CNAME),同时在源站(香港VPS)做HTTP(S)与网络参数优化。
必须项:域名在可管理DNS的注册商、CDN服务账号(如Cloudflare、阿里云CDN、KeyCDN等)、香港VPS可SSH、源站开放必要端口(80/443)。
建议备份:修改前导出当前DNS记录,记录源站公网IP与防火墙规则。
步骤1:将域名DNS托管到支持GeoDNS或CNAME平铺(Flatten)的服务商(Cloudflare/Route53/阿里云DNS)。
步骤2:设置TTL为60-300秒以便快速回滚(在稳定后可增至3600)。示例:在DNS控制台修改A记录TTL=300。
步骤3:若使用CDN,优先使用CNAME指向CDN提供的域名;若DNS不支持CNAME at apex,使用提供商的Flatten功能或将CDN启为代理(例:Cloudflare的“橙色云”)。
步骤4:开启GeoDNS或基于地理的解析策略,将美国用户解析到CDN在美的POP或备用美服IP。
安装与证书:sudo apt update && sudo apt install -y nginx certbot;使用certbot获取证书:sudo certbot certonly --nginx -d example.com。
nginx示例(/etc/nginx/sites-available/default):
server {
listen 80;
server_name example.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
server_name example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
location / {
proxy_pass http://127.0.0.1:8080; # 应用端口
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_buffering off;
}
}
重启nginx:sudo systemctl reload nginx。
添加站点:在CDN控制台添加域名,填写源站IP为香港VPS公网地址。
重要选项:
- 打开HTTP/2或HTTP/3、Brotli压缩;开启TLS模式为“Full (strict)”如果有CA证书。
- 配置缓存规则:静态资源长缓存,动态页面缓存短或不缓存;设置缓存键(忽略无关query string)。
- 启用Origin Shield或最接近POP的回源策略以减少回源流量与延迟。
- 配置健壮的回源校验(白名单只允许CDN IP访问源站,或通过自定义头部校验)。
开启BBR与优化TCP参数(Ubuntu示例):
sudo tee /etc/sysctl.d/99-sysctl.conf <<'EOF'
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 15
net.core.somaxconn = 1024
EOF
sudo sysctl --system
确认BBR:sysctl net.ipv4.tcp_congestion_control && lsmod | grep bbr
提升文件句柄:sudo echo "root soft nofile 65536" >> /etc/security/limits.conf
DNS测试:dig +short example.com @8.8.8.8;检查解析到CDN域名或POP IP。
连通性测试:traceroute -n example.com(或 mtr),查看到美国路径是否到达CDN POP而非直接回源。
HTTP测试:curl -I -L --http2 https://example.com;关注响应头X-Cache、server、via等,确认是否命中CDN缓存。
源站直连测试:curl --resolve example.com:443:源站IP https://example.com -k,验证源站配置与证书是否正确。
监控项:CDN分析(命中率、POP延迟)、源站监控(CPU、网络、错误率)、DNS解析异常告警。
回滚策略:将DNS TTL设置低并保留原A记录,出现问题时快速回滚到原解析;CDN侧保留“暂停/绕过”功能以临时关闭代理。
容灾:配置多个源(多个机房或云实例)并用GeoDNS或负载均衡做健康检查。
问:如果美国用户仍然延迟高、丢包严重,优先检查哪些点?
答:先用mtr/traceroute定位是到CDN POP还是CDN到源站回源链路有问题;检查CDN POP选择是否正确、CDN缓存命中率低则应优化cache规则;若回源链路问题,排查源站ISP与国际出口(丢包、拥塞),必要时更换回源机房或开通多线带宽。
问:是否必须把域名完全交给CDN DNS管理?我能只用CNAME加CDN吗?
答:如果注册商支持CNAME apex平铺(Flatten),可以只用CNAME指向CDN并继续使用原DNS。但若不支持,推荐将DNS托管到支持GeoDNS/Flatten的服务商以便更灵活地做智能解析与快速回滚。
问:如何在保障安全的同时允许CDN访问源站?
答:在源站防火墙只放行CDN提供的回源IP段,并在回源请求中要求CDN添加自定义头(如X-From-CDN: true)配合nginx验证;同时启用TLS并使用严格模式(Full strict)以防中间人攻击。