Nginx反向代理多跨境站点配置详解
不少做跨境业务的朋友都会遇到一个场景:手上有几个面向不同国家的网站(比如美国站、欧洲站、东南亚站),但不想为每个站点都买一台服务器。
这时用 Nginx 反向代理就能把多个后端服务通过不同域名或路径映射到同一台服务器上,既省钱又方便管理。
下面我会从零开始,带你把 Nginx 反向代理多跨境站点的配置跑通。
配置前需要准备好的东西
开始操作前,确认你有以下权限或资源:
- 一台安装了 Nginx 的 Linux 服务器(CentOS 7+/Ubuntu 20.04+ 均可)。如果还没装,执行
sudo apt install nginx(Ubuntu)或sudo yum install nginx(CentOS)完成安装。 - 两个或以上的域名(例如
us.example.com、eu.example.com),并已解析到服务器 IP。 - 后端服务已经跑在指定端口上(比如本地的 3000、4000 端口,或者在其他服务器的公网 IP 上)。
- 对 Nginx 的配置文件位置有基础了解:主配置文件一般在
/etc/nginx/nginx.conf,站点配置文件建议放在/etc/nginx/conf.d/目录下,方便管理。
配置反向代理的核心步骤
Nginx 反向代理多跨境站点最常用的方法就是为每个域名单独写一个 server block。
下面以两个站点为例:
- 创建站点配置文件
sudo nano /etc/nginx/conf.d/us.conf
粘贴以下内容(把 server_name 和 proxy_pass 改成你自己的域名和后端地址):
server {
listen 80;
server_name us.example.com;
location / {
proxy_pass http://127.0.0.1:3000;
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_set_header X-Forwarded-Proto $scheme;
}
}
同样创建欧洲站的配置文件:
sudo nano /etc/nginx/conf.d/eu.conf
内容类似,只是 server_name 和 proxy_pass 换成 eu.example.com 和 http://127.0.0.1:4000。
- 检查配置并重载 Nginx
sudo nginx -t
sudo systemctl reload nginx
如果返回 test is successful,说明语法正确。
现在用浏览器访问 http://us.example.com 就能看到后端 3000 端口的内容,http://eu.example.com 对应 4000 端口。
- (可选)添加 SSL 证书(推荐使用 Let's Encrypt)
如果所有站点共用同一台服务器,可以给每个域名单独申请证书,也可以使用通配符证书。
安装 Certbot 后执行:
sudo certbot --nginx -d us.example.com -d eu.example.com
Certbot 会自动修改 Nginx 配置并启用 HTTPS。
注意如果域名分布在不同国家,要确保 DNS 解析正确,否则证书申请可能失败。
这些坑你可能也会遇到
- 502 Bad Gateway:最常见的原因是后端服务没有启动,或者
proxy_pass写的地址不对。先检查后端是否运行:curl http://127.0.0.1:3000,如果能返回数据,再检查 Nginx 的 error log:tail -f /var/log/nginx/error.log。 - SSL 证书冲突:如果多个 server block 共用同一个 IP 但使用不同证书,必须为每个域名单独配置 ssl_certificate 和 ssl_certificate_key,Nginx 会根据 SNI 自动选择。记得在
listen 443 ssl中加上ssl。 - 路径转发踩坑:如果后端应用不期望子路径,比如你在
proxy_pass里加了路径(如http://127.0.0.1:3000/api),则 location 里尽量不要用正则捕获组,否则可能产生路径拼接错误。简单场景建议保持proxy_pass后面不加子路径,或使用proxy_pass http://backend;加上proxy_set_header Host $host;。 - 跨境网络延迟高:如果后端服务器在国外,可以考虑启用 Nginx 缓存或使用 CDN 中间层。但要注意缓存会占用磁盘,记得限制
proxy_cache_path的大小。
验证你的代理是否正常
配置完成后,做几个简单的验证:
- 域名解析验证:
nslookup us.example.com返回的 IP 就是你服务器的 IP。 - 端口连通性:从本地 curl 你的域名:
curl -I http://us.example.com,观察返回的 HTTP 状态码(200 或 301 正常,502 需排查)。 - 后端日志确认:查看后端应用的访问日志,确认请求来源 IP 是 Nginx 服务器(注意
X-Real-IP已传递真实 IP)。 - SSL 测试:如果配置了 HTTPS,访问
https://us.example.com,浏览器地址栏显示安全锁,并且证书信息正确。
如果你在配置 Nginx 反向代理多跨境站点时还遇到其他问题,比如 URL 重写、负载均衡、WebSocket 支持等,欢迎在评论区留言。
建议先从最简单的两个站点入手,跑通后再扩展到更多站点的场景,这样排错成本最低。