Nginx反向代理多外贸站点独立域名配置指南
为什么需要Nginx反向代理管理外贸站点
做外贸的朋友经常遇到一个问题:一台服务器上跑了多个业务(比如Shopify独立站、外贸CRM、邮件营销工具),每个业务都要绑定自己的域名。
直接让每个服务监听80或443端口不现实,因为端口有限且容易冲突。
Nginx反向代理就是最佳方案——它作为统一入口,根据域名把请求转发到不同的后端服务,每个站点绑定独立域名,互不干扰。
本文会带你在CentOS/Debian上完成配置,所有步骤都经过验证,直接复制命令就能用。
配置前需要确认的事项
动手之前请确保以下三点已经就绪:
- Nginx已安装并正常运行:检查
nginx -v和systemctl status nginx。 - 域名已解析到服务器IP:每个站点的A记录都指向同一个公网IP。
- 后端服务已经启动:例如端口3000、4000、5000上的Web应用,用
curl http://127.0.0.1:3000确认能访问。
如果用的是HTTPS,提前准备SSL证书(可以用Let's Encrypt免费签发,后面配置时再加)。
为每个站点添加独立server块
Nginx的配置通常放在 /etc/nginx/conf.d/ 或 /etc/nginx/sites-available/。
为了方便管理,每个域名创建一个独立文件。
假设你有两个站点:
siteA.com→ 后端127.0.0.1:3000siteB.com→ 后端127.0.0.1:4000
创建第一个配置文件:
vim /etc/nginx/conf.d/siteA.conf
写入以下内容(HTTP版本,不带SSL):
server {
listen 80;
server_name siteA.com www.siteA.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;
}
}
同理创建 siteB.conf:
server {
listen 80;
server_name siteB.com www.siteB.com;
location / {
proxy_pass http://127.0.0.1:4000;
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;
}
}
关键点:proxy_set_header Host $host 保证了后端能正确识别原始域名;
如果后端依赖客户端真实IP(比如外贸CRM统计),必须加上后面几行。
配置完成后测试语法:
nginx -t
如果提示 syntax is ok,重新加载Nginx:
systemctl reload nginx
(或者 nginx -s reload)
配置完别忘了检查这几个细节
很多新手卡在以下环节,提前留意能省很多排错时间:
- 防火墙放行端口:如果后端服务在其他端口,Nginx和客户端之间只走80/443,但Nginx到后端需要确保服务器内部网络通(一般没问题)。检查
firewall-cmd --list-all或ufw status。 - 域名解析生效:执行
dig siteA.com +short看返回IP是否正确。 - 日志定位错误:如果访问出错,先看
/var/log/nginx/error.log。常见错误是“upstream prematurely closed connection” —— 往往是后端服务没启动或挂了。 - HTTPS配置(可选):用
certbot --nginx -d siteA.com自动签发证书并改写配置,非常方便。注意同一个IP上多个域名都能配HTTPS,Nginx会根据server_name选择对应证书。 - 避免location / 冲突:如果后端有子路径需求,可以写更具体的location,例如
location /api/ { proxy_pass ... }。
如何确认反向代理生效
最简单的方法是用curl测试:
curl -H "Host: siteA.com" http://你的服务器IP
如果返回了后端站点的首页内容(而不是Nginx默认页面),说明配置生效。
更彻底的方法是加上 -v 参数查看响应头:
curl -v http://你的服务器IP -H "Host: siteA.com"
在返回信息里能看到 Server: nginx 以及后端服务返回的内容。
你也可以直接通过浏览器访问域名(记得先确保DNS生效)。
打开 http://siteA.com,如果看到你的外贸站点内容,大功告成。
高频问题与排错思路
Q:执行 nginx -t 报错 server_name 重复?
A:检查是否一个文件里写了两个server块监听同一个端口且server_name相同。每个域名单独一个文件,避免冲突。
Q:访问域名显示Nginx欢迎页?
A:说明请求没有被转发到后端。检查proxy_pass里的地址和端口是否正确,确认后端服务正在监听。可以 curl http://127.0.0.1:3000 测试。
Q:出现502 Bad Gateway?
A:Nginx无法连接到后端。可能原因:后端服务挂了、端口写错、或者后端监听的是127.0.0.1但Nginx proxy_pass用了localhost(解析到IPv6)。建议全部用127.0.0.1。
Q:需要同时支持HTTP和HTTPS怎么办?
A:在server块里增加listen 443 ssl; 并配置证书路径。或者用certbot自动管理。
当你按上述步骤完成配置后,一台服务器就能同时服务多个外贸站点,每个站点使用独立域名,访问互不影响。
后续如果有新增站点,只需仿照添加配置文件并reload即可。