You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Nginx反向代理中移除URL语言前缀并添加Locale请求头?

在Nginx中实现URL语言前缀识别与转发配置

完全可以在Nginx中实现这个需求,核心是利用Nginx的map指令匹配语言前缀,结合rewrite和proxy_set_header完成URL重写与请求头注入,以下是具体实现路径:

1. 定义有效语言匹配规则

在Nginx的http块中使用map指令,通过正则匹配URI开头的语言前缀,将匹配到的语言码存入变量,这种方式便于动态更新有效语言列表——只需修改正则中的语言码即可。

http {
    # 匹配URI开头的有效语言前缀,将语言码存入$detected_locale变量
    map $uri $detected_locale {
        ~^/(en|fr|ru)/    $1;  # 这里的en/fr/ru替换为你的有效语言列表
        default           "";   # 未匹配到语言前缀时为空字符串
    }

    # 其他http级配置...
}

2. 配置Server块处理请求

在目标server块中,根据$detected_locale变量的值,分别处理带语言前缀和默认语言的请求:

server {
    listen 80;
    server_name example.tld;

    # 处理带语言前缀的请求:移除前缀并注入对应Locale头
    if ($detected_locale != "") {
        # 内部重写URL(浏览器地址栏不变),若需让地址栏更新为去掉前缀的URL,将last改为permanent(301重定向)
        rewrite ^/($detected_locale)(/.*)?$ $2 last;
        proxy_set_header Locale $detected_locale;
    }

    # 处理默认语言请求:注入默认Locale头
    if ($detected_locale = "") {
        proxy_set_header Locale en;  # en替换为你的默认语言
    }

    # 反向代理上游服务器的核心配置
    location / {
        proxy_pass http://your_upstream_server;  # 替换为你的上游服务器地址
        
        # 其他必要的代理头(保持请求上下文)
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

3. 动态更新语言列表

当需要新增或移除支持的语言时,只需修改map块中的正则表达式即可。例如新增西班牙语es,只需将正则改为:

~^/(en|fr|ru|es)/    $1;

4. 验证配置

  • 访问example.tld/fr/blog:Nginx会将请求重写为/blog,并携带Locale: fr头转发给上游服务器
  • 访问example.tld/blog:Nginx直接携带Locale: en头转发给上游服务器

内容的提问来源于stack exchange,提问作者Mohammad Miras

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 06:47:16