本文约 3,310 字,预计阅读 9 分钟。文中命令与配置均经过实测,可直接参考执行。
引言:选址是一个”不可逆”的决定
服务器位置是外贸站少数几个”做错了要推倒重来”的决定之一。页面改版可以慢慢调,主机迁一次要停服、改 DNS、重新配证书,还面临几小时的解析生效期。更麻烦的是,很多人是在站点做完后才发现”客户打不开”,这时再迁移,之前做的所有内容都得跟着搬。所以选址必须在建站第一天定下来,而且要基于测量数据,不是凭感觉。
原理分析:三个指标的真实权重
延迟(RTT):物理距离决定下限。中国到美国西海岸单向约 150–200ms,到欧洲约 200–280ms,到新加坡约 40–70ms。TCP 握手 + TLS 握手 + 首个请求,意味着客户在美西访问一个国内机房的站点,光握手就要 600ms 以上,还没开始传内容。
TTFB(首字节时间):比 ping 更能反映真实体验,因为它包含了服务器处理时间。用 curl 可以精确测量分项耗时。
合规与稳定性:国内机房需要 ICP 备案,未备案域名无法解析到国内 IP;海外机房免备案,但要注意目标市场的法律要求(如欧盟的 GDPR)。
| 方案 | 海外客户速度 | 国内维护便利性 | 备案 | 适用 |
|---|---|---|---|---|
| 国内机房 | 慢,TTFB 常 > 1s | 好 | 必须 | 客户在国内 |
| 海外机房 | 快,TTFB 常 < 300ms | 一般 | 免备案 | 客户在海外 |
| 海外机房 + CDN | 最快 | 一般 | 免备案 | 客户分布广 |
| 香港 / 新加坡 | 折中 | 好 | 免备案 | 兼顾国内外 |
保姆级实操
步骤 1:先测,再决定。 用 curl 的分项计时,从目标市场的机器发起测试。没有海外机器可以用免费的在线测速服务,或者用云厂商按小时租一台。
# 分项测量:DNS 解析 / TCP 连接 / TLS 握手 / 首字节 / 总耗时
curl -o /dev/null -s -w \
"dns=%{time_namelookup} tcp=%{time_connect} tls=%{time_appconnect} ttfb=%{time_starttransfer} total=%{time_total}\n" \
https://example.com/
# 从多个地区连续测 5 次,看波动
for i in 1 2 3 4 5; do
curl -o /dev/null -s -w "ttfb=%{time_starttransfer}\n" https://example.com/
done
步骤 2:确定客户地理分布。 从 Google Analytics 或已有的询盘记录里统计客户国家。如果 70% 以上客户在欧美,机房选美西或法兰克福;如果东南亚客户多,选新加坡。
步骤 3:选机房类型。 共享虚拟主机不推荐(外贸站面临海外爬虫与偶发攻击,隔离性差)。起步选 2 核 4G 的云服务器,系统用 Ubuntu 22.04 + Nginx + PHP 8.2 + MariaDB。
步骤 4:给服务器做基础优化。 开启 HTTP/2 与 Brotli,静态资源设置长缓存,这三件事对海外访问的提升最明显。
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;
brotli on;
brotli_comp_level 5;
brotli_types text/css application/javascript image/svg+xml application/json;
gzip on;
gzip_types text/css application/javascript image/svg+xml;
location ~* \.(css|js|woff2|jpg|png|webp)$ {
expires 30d;
add_header Cache-Control "public, immutable";
}
location / {
try_files $uri $uri/ /index.php?$args;
}
}
步骤 5:接 CDN。 Cloudflare 免费版对海外外贸站性价比很高:全球节点、免费 SSL、基础 WAF。注意 WordPress 后台与登录页要设置为不缓存,避免后台操作异常。
步骤 6:确认真实 IP 透传。 上了 CDN 后不处理,日志里全是 CDN 节点 IP,评论反垃圾与限流会失效。
// 在 wp-config.php 之前加载的逻辑,用于还原 CDN 后的真实 IP
if ( isset( $_SERVER['HTTP_CF_CONNECTING_IP'] ) ) {
$_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_CF_CONNECTING_IP'];
}
# 或者在 Nginx 层用 realip 模块处理
set_real_ip_from 173.245.48.0/20;
set_real_ip_from 103.21.244.0/22;
real_ip_header CF-Connecting-IP;
步骤 7:做迁移演练。 如果后续要换机房,先在测试域名上完整演练一次,确认 wp search-replace 能处理序列化数据。
# 换域名/换机房时的标准操作,注意 --all-tables 处理序列化字段
wp search-replace 'https://old.com' 'https://new.com' --all-tables --dry-run
wp search-replace 'https://old.com' 'https://new.com' --all-tables
wp rewrite flush --hard
wp cache flush
步骤 8:监控可用性。 用外部监控每 5 分钟探活,一旦连续 3 次失败就告警。外贸站跨越时区,你睡觉的时候正是客户的白天。
常见踩坑
- 只看 ping 不看 TTFB。 ping 值好看但页面慢,多半是后端 PHP 慢,TTFB 才反映真实情况。
- 国内机房 + 海外客户。 客户首屏 5 秒,跳出率超过 70%。
- 上了 CDN 但没设后台规则。 后台操作被缓存,出现”改了不生效”的诡异现象。
- 案例: 某外贸站把服务器放在国内并做了备案,理由是”国内访问后台快、维护方便”。上线后欧洲客户平均首屏 6.2 秒,Google Ads 投放花了几千元只换来 3 条询盘。迁移到法兰克福机房后同样预算拿到 40 多条询盘。教训:站点速度要按客户所在地衡量,不是按你的所在地。
- 真实 IP 未透传。 反垃圾插件把 CDN 节点 IP 判为攻击者,误伤正常客户。
- DNS TTL 设置过长。 迁移时 TTL 设成 86400,切换后部分地区 24 小时还在访问旧服务器。
- 忽略目标市场合规。 面向欧盟客户没做 GDPR 合规,可能面临投诉。
总结
选址的判断顺序:先统计客户地理分布 → 用 curl 实测候选机房的 TTFB → 选延迟最低的机房 → 接 CDN 兜住全球分散客户 → 处理真实 IP 透传。折中方案是香港或新加坡机房,兼顾国内外访问。判断标准:目标市场实测 TTFB 低于 500ms、首屏 3 秒内。外贸站整体上线顺序见外贸独立站完整流程;域名与邮箱配置见域名选择与企业邮箱。
