Nginx反向代理多外贸站点独立配置教程
为什么多个外贸站需要独立反向代理
不少外贸站长用一台服务器托管多个独立站点,如果共用同一个Nginx反向代理配置,很容易出现跨站Cookie泄漏、SSL证书混乱、后端服务端口冲突等连锁问题。独立配置的核心思路:每个站点拥有专属的server块,分别指定域名、证书和后端地址。
这样改一个站点不会影响其他站点,排查故障时也更清晰。
动手前的环境检查清单
开始配置前,请确认以下条件已经满足:
- Nginx已安装并正常运行:执行
nginx -v查看版本,用systemctl status nginx确认服务状态。 - 域名解析生效:每个外贸站点对应的域名(例如 site1.com、site2.com)都已解析到服务器IP,可用
ping或dig验证。 - SSL证书准备:本教程以Let's Encrypt免费证书为例,使用Certbot申请。如果已持有其他证书,记得准备好证书文件和密钥文件的路径。
- 后端服务已启动:每个站点对应的后端程序(如Java应用、Python Flask、Node.js等)已运行在本地不同端口(比如 3001、3002、3003),并且可以从本机正常访问。
如果不确定后端服务端口,可以用 curl http://127.0.0.1:端口号 测试是否能返回数据。
一步步为每个站点添加独立的反向代理配置
Nginx的配置通常放在 /etc/nginx/sites-available/ 目录下(或直接写在 nginx.conf 的 http 块内)。
推荐按站点创建独立的文件,方便管理。
- 为第一个站点创建配置文件:
sudo nano /etc/nginx/sites-available/site1.com.conf
粘贴以下基础配置(请将 your-domain.com 替换为实际域名,3001 替换为后端端口):
server {
listen 80;
server_name site1.com www.site1.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name site1.com www.site1.com;
ssl_certificate /etc/letsencrypt/live/site1.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/site1.com/privkey.pem;
location / {
proxy_pass http://127.0.0.1:3001;
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;
}
}
保存退出。
- 创建第二个、第三个站点的配置文件:
使用同一个模板,修改 server_name、ssl证书路径、proxy_pass端口即可。
例如第二个站点使用 3002 端口。
- 启用所有站点:
对每个配置文件建立软链接到 sites-enabled 目录:
sudo ln -s /etc/nginx/sites-available/site1.com.conf /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/site2.com.conf /etc/nginx/sites-enabled/
- 测试配置并重载Nginx:
sudo nginx -t # 检查语法
sudo systemctl reload nginx # 使配置生效
配置完成后最容易踩的3个坑
- Host头未正确传递:如果后端应用依赖
Host头判断域名,忘记加入proxy_set_header Host $host;会导致站点内部跳转到错误域名。检查方法:在Nginx配置中确认每个server块的location内都包含上述头设置。 - SSL证书绑定错误:将 site1.com 的证书写在 site2 的server块里,浏览器会提示证书不匹配。强制检查:用
openssl s_client -connect your-domain.com:443 -servername your-domain.com查看证书Common Name。 - 端口冲突:如果两个后端服务意外使用了同一个端口,反向代理会转发到相同进程。预防:启动后端时指定不同端口,并记录在笔记本上。
用curl和浏览器验证每站独立生效
- 命令行验证:
curl -I https://site1.com # 检查返回的HTTP头,应看到200或301(如果有重定向)
curl -I https://site2.com
注意观察 Server 字段是否为 nginx,以及 Location 是否正确。
- 浏览器测试:清空缓存后逐个访问各站点,确认页面内容正确,SSL证书锁正常(无告警)。
- 验证隔离性:把 site1 暂定后端服务,此时访问 site1 应显示502或拒绝连接,而 site2 完全不受影响。
如果你正在处理Nginx反向代理多外贸站点独立配置,建议先按本文步骤完整执行,再根据自己的环境做微调;
遇到异常时优先回看避坑和高频问题部分。
配置完成后,还可以考虑使用Nginx的 upstream 模块做负载均衡,或结合Fail2Ban增强安全性,在后续教程中我会逐一介绍。