# Nginx 多域名配置搭建多语言外贸站点完整教程
## 核心答案
要在 Nginx 上搭建多语言外贸站点,核心思路是为每个语言绑定独立的域名或子域名,通过创建对应的 server 块并指向不同站点目录来实现。例如 `en.example.com` 存放英文内容,`cn.example.com` 存放中文内容。配合 Let's Encrypt 免费 SSL 证书,即可安全访问。本文从零开始,提供宝塔面板与纯命令行两种实现方式,附带避坑说明和验证方法。
---
## 准备工作:你需要什么?
在开始配置前,请确认已经准备好以下条件:
- 一台运行 Linux 的云服务器(推荐使用泽御云云服务器,已开通 80/443 端口)。
- 已安装 Nginx(可通过宝塔面板一键部署,或手动安装 LNMP 环境)。
- 至少两个域名(例如 `en.example.com` 和 `cn.example.com`),并已通过 DNS 解析到服务器公网 IP。
- 如果你的服务器是新购的,建议先执行 `apt update && apt upgrade -y`(Debian/Ubuntu)或 `yum update -y`(CentOS)更新系统。
---
## 方法一:使用宝塔面板配置多域名站点
### 1. 创建站点
登录宝塔面板,点击左侧“网站” → “添加站点”。在弹出的窗口中:
- 域名:输入 `en.example.com`
- 根目录:自动生成或手动填写 `/www/wwwroot/en.example.com`
- 创建数据库和 FTP 视需要勾选(外贸站点一般只需纯静态文件)。
- 提交后,宝塔会自动生成 Nginx 配置文件并绑定域名。
- 重复以上步骤,创建第二个站点 `cn.example.com`。
### 2. 上传网站文件
分别将英文和中文的网站文件上传到各自根目录。例如:
- `/www/wwwroot/en.example.com/index.html` 写英文内容。
- `/www/wwwroot/cn.example.com/index.html` 写中文内容。
### 3. 开启 SSL
进入每个站点的“设置” → “SSL”,选择“Let's Encrypt”,勾选强制 HTTPS,点击申请。宝塔会自动完成证书验证与配置。
---
## 方法二:手动编写 Nginx 配置文件(适合无面板环境)
### 1. 创建站点目录
```bash
sudo mkdir -p /var/www/en.example.com
sudo mkdir -p /var/www/cn.example.com
echo "
Welcome to English Site
" | sudo tee /var/www/en.example.com/index.html
echo "欢迎访问中文站点
" | sudo tee /var/www/cn.example.com/index.html
```
### 2. 编写 Nginx 配置
在 `/etc/nginx/sites-available/` 下创建配置文件 `multi-lang.conf`:
```nginx
server {
listen 80;
server_name en.example.com;
root /var/www/en.example.com;
index index.html index.htm;
}
server {
listen 80;
server_name cn.example.com;
root /var/www/cn.example.com;
index index.html index.htm;
}
```
### 3. 启用配置并测试
```bash
sudo ln -s /etc/nginx/sites-available/multi-lang.conf /etc/nginx/sites-enabled/
sudo nginx -t # 测试语法
sudo systemctl reload nginx
```
### 4. 申请 SSL 证书(使用 Certbot)
```bash
sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d en.example.com -d cn.example.com
```
按照提示完成验证后,Nginx 配置会自动更新为 HTTPS。
---
## 避坑指南:常见错误与解决办法
- **域名解析不生效**:配置变更后需等待 DNS 缓存刷新(最长 24 小时),可用 `ping en.example.com` 检查是否指向正确 IP。
- **403 Forbidden**:检查站点目录权限,确保 Nginx 用户(通常是 `www-data` 或 `nginx`)有读取权限:`sudo chown -R www-data:www-data /var/www/`。
- **SSL 证书申请失败**:确认域名已解析到本机,且 80 端口未被占用。如果使用 CDN,先临时关闭 CDN。
- **server_name 匹配优先级**:Nginx 优先匹配精确域名,如果配了 `_` 默认站点,可能导致请求走错站点。建议所有多域名配置都显式写出 server_name。
---
## 效果验证:确认多语言站点正常工作
### 1. 浏览器访问
分别打开 `http://en.example.com` 和 `http://cn.example.com`,应该看到不同的页面内容。
### 2. 命令行验证
```bash
curl -H "Host: en.example.com" http://localhost
curl -H "Host: cn.example.com" http://localhost
```
如果返回对应的 HTML 内容,则表示配置成功。
### 3. 检查 SSL
使用 `curl -I https://en.example.com`,看到 `HTTP/2 200` 和 SSL 证书信息说明 HTTPS 已生效。
---
## 高频问题解答 (FAQ)
**Q1: 如果我需要更多语言,比如日文和韩文,怎么加?** A: 重复相同步骤,新增域名(如 `jp.example.com`)并创建对应的 server 块和站点目录。将文件上传后 reload Nginx 即可。
**Q2: 我想用子目录方式(example.com/en、example.com/cn)而不是子域名,怎么改?** A: 使用单个 server 块,通过 `location /en` 和 `location /zh` 分别指向不同目录。注意修改 root 和 index 的路径。
**Q3: 开启 HTTPS 后为什么还是跳转到 HTTP?** A: 检查 Nginx 配置中是否写了 `return 301 https://$host$request_uri;` 的强制跳转规则,或者有外部 CDN 未配置 HTTPS。宝塔面板用户确认已勾选“强制 HTTPS”。
**Q4: 更换服务器迁移站点时,Nginx 配置能否直接复制?** A: 配置可以复制,但需注意新服务器上的目录路径、PHP 版本、SSL 证书文件路径可能不同。建议逐项检查后通过 `nginx -t` 测试再 reload。
---
*如果你正在处理 Nginx 多域名配置搭建多语言外贸站点,建议先按本文步骤完整执行,再根据自己的环境做微调;遇到异常时优先回看避坑和高频问题部分。*