Nginx多语言站点配置适配海外访客访问

为什么需要配置多语言站点

如果你的网站有来自不同国家的访客,让浏览器自动切换语言版本可以显著提升体验。
比如在 Nginx 上配置多语言站点,访客从海外访问时直接跳转到英文页面,国内用户看到中文页面。
下面我用最直接的步骤带你完成配置,无需复杂开发经验。

准备工作

你需要先确认以下条件:

  • 一台服务器:安装好 Nginx(建议 1.18+ 版本),可以用宝塔面板或直接命令行操作。
  • 已解析的域名:比如 example.com,并且你已经在 Nginx 里配置了基本的 server 块。
  • 准备多语言内容:假设你已把不同语言的页面放在不同目录下,例如:
  • /var/www/example/en/(英文)
  • /var/www/example/zh/(中文)
  • /var/www/example/ja/(日文)

如果还没有准备好目录,先创建并放好对应语言的文件。

方案一:基于 URL 路径区分语言

这是最常见的做法,访客通过 example.com/en/example.com/zh/ 访问不同语言。
Nginx 配置很简单:

server {
    listen 80;
    server_name example.com;

    location /en/ {
        alias /var/www/example/en/;
        try_files $uri $uri/ /en/index.html;
    }

    location /zh/ {
        alias /var/www/example/zh/;
        try_files $uri $uri/ /zh/index.html;
    }

    location /ja/ {
        alias /var/www/example/ja/;
        try_files $uri $uri/ /ja/index.html;
    }

    location / {
        # 默认使用中文
        rewrite ^/$ /zh/ permanent;
    }
}

注意aliastry_files 配合时,try_files 的参数路径要基于 alias 后的实际目录路径写,否则可能 404。
上面示例已做调整。

方案二:基于子域名(适合大型站点)

en.example.comzh.example.com 等,然后用不同的 server 块分别配置。
配置片段:

server {
    listen 80;
    server_name en.example.com;
    root /var/www/example/en;
    index index.html;
}

server {
    listen 80;
    server_name zh.example.com;
    root /var/www/example/zh;
    index index.html;
}

这种方法需要提前做好子域名的 DNS 解析。

根据访客语言自动重定向(关键步骤)

上面两种方案只能让用户手动切换,下面用 Nginx 的 map 指令根据 Accept-Language 请求头自动跳转到对应语言版本,适合零基础用户复制。

在 Nginx 配置文件的 http 块(通常在 /etc/nginx/nginx.conf)中添加:

map $http_accept_language $lang {
    default zh;
    ~*^en en;
    ~*^ja ja;
    ~*^zh zh;
}

然后在 server 块中用如下判断实现自动跳转(假设你使用方案一的路径结构):

server {
    listen 80;
    server_name example.com;
    root /var/www/example;

    # 首页自动重定向
    location = / {
        if ($lang !~* ^zh) {
            rewrite ^ /$lang/ permanent;
        }
        # 中文用户直接访问默认目录
        rewrite ^ /zh/ permanent;
    }

    location /en/ {
        alias /var/www/example/en/;
        try_files $uri $uri/ /en/index.html;
    }

    location /zh/ {
        alias /var/www/example/zh/;
        try_files $uri $uri/ /zh/index.html;
    }

    location /ja/ {
        alias /var/www/example/ja/;
        try_files $uri $uri/ /ja/index.html;
    }
}

解释

  • map 指令将 Accept-Language 头部映射为语言代码,例如浏览器发送 en-US,en;q=0.9,则匹配到 en
  • location = / 处理首页,如果检测到非中文语言就 301 重定向到对应路径。
  • 中文用户直接重定向到 /zh/

注意if 在 location 里性能影响极小,用于首页重定向没问题。
如果你担心,可以用 return 301 替代 rewrite

配置完成后重载 Nginx

配置修改后执行:

nginx -t          # 测试配置语法
systemctl reload nginx   # 重载生效

验证方法

使用 curl 模拟不同语言访问:

# 模拟英文浏览器
curl -H "Accept-Language: en-US" -I http://example.com/
# 返回的 Location 应指向 /en/

# 模拟中文浏览器
curl -H "Accept-Language: zh-CN" -I http://example.com/
# 返回的 Location 应指向 /zh/

# 模拟日文浏览器
curl -H "Accept-Language: ja" -I http://example.com/
# 返回的 Location 应指向 /ja/

浏览器测试:用无痕窗口设置首选语言后访问首页,观察地址栏跳转。

常见问题与避坑

1. 重定向循环
如果发现一直跳转,检查默认语言路径是否被当作非默认语言再次重定向。建议在 location /zh/ 里也加上内部 rewrite 保证不循环。简单做法:用 try_files 直接提供内容,不触发外部跳转。

2. 浏览器发送的 Accept-Language 格式多样
map 中的正则 ~*^en 只匹配以 en 开头的语言代码(忽略大小写)。如果有些浏览器发送 en-gb 也能匹配,但如果你只需要精确匹配可以写更严格的正则。

3. 使用宝塔面板的用户
宝塔的 Nginx 配置在 /www/server/panel/vhost/nginx/ 下,直接在对应站点配置文件中添加 map 和跳转规则即可。注意 map 必须放到 http 块内,普通用户可先备份原配置,然后在宝塔面板的“配置修改”中找到顶部 http { 的结束位置前插入 map 代码。

4. SEO 注意事项
使用 301 重定向告知搜索引擎不同语言的对应关系,但不要滥用。建议同时添加 标签到每一页的 HTML 头部。

写在最后

通过上述步骤,你已经能用 Nginx 为海外访客配置多语言站点,让他们自动访问适合自己的语言版本。
实际部署时注意根据你的目录结构和语言数量微调 map 和 location 规则。
如果在配置过程中遇到 404 或循环重定向,优先检查路径和重写规则,并用 nginx -t 验证语法。

分享到:
上一篇
家用住宅NAS同步跨境网站全站备份数据
下一篇
产品图片WebP压缩降低海外加载延迟
1
系统公告

机房迁移升级通知

尊敬的用户: IP 段 103.23.148.x、156.224.29.x 原香港一区线路波动、攻击频繁,平台定于 7 月 5 日凌晨分批迁移至香港 GIA 机房,硬件升级 AMD 铂金机型。 迁移均在凌晨操作,最大程度降低业务影响,迁移期间服务器临时关机; 升级后配置不降低、费用不涨价,数据默认同步迁移; 迁移后 IP 全部更换,请及时修改域名解析、防火墙白名单; 建议提前备份重要数据,有问题可联系在线客服。 感谢理解与支持! 泽御云科技 2026.06.30
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意