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

如何在Nginx中拆分URI为变量并应用于proxy_pass

如何在Nginx中拆分URI为变量并应用于proxy_pass

嘿,我完全懂你的需求——就是要把像 https://example.com/user/port 这样的URI拆成user和port两个部分,然后把这俩变量用到proxy_pass里对吧?其实用Nginx的正则匹配就能轻松搞定,我给你详细说下怎么配置:

首先,我们需要用正则location来匹配目标URI格式,同时通过正则分组捕获我们需要的两个部分。Nginx里正则捕获的分组会自动存到$1、$2这类内置变量里,也可以自己定义更有意义的变量方便维护。

给你一个完整的配置示例,直接就能用:

server {
    listen 443 ssl;
    server_name example.com;

    # 匹配 /[用户名]/[端口号] 格式的URI
    location ~^/([^/]+)/([^/]+)$ {
        # 可选步骤:把捕获的分组存成语义化变量,后期改配置更清晰
        set $target_user $1;
        set $target_port $2;

        # 把变量代入proxy_pass,完成转发
        proxy_pass http://$target_user.example.com:$target_port;

        # 以下是常用的代理配置(按需调整)
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

配置解释:

  • 正则~^/([^/]+)/([^/]+)$的意思是:匹配以/开头,后面跟着非斜杠的字符串(第一个分组,对应user),再跟一个/,最后是非斜杠的字符串(第二个分组,对应port)的URI。
  • 当用户请求https://example.com/alice/8080时,Nginx会自动把请求转发到http://alice.example.com:8080。
  • 如果你的URI后面还有额外路径(比如https://example.com/alice/8080/api/get),想要把后面的路径也一并转发的话,可以把正则改成~^/([^/]+)/([^/]+)(.*)$,然后proxy_pass写成http://$target_user.example.com:$target_port$3;,这样$3就会捕获到/api/get这部分路径。

注意事项:

  • 正则location的优先级比前缀location高,所以如果你的server块里还有其他location规则,要注意顺序和匹配逻辑,避免冲突。
  • 确保$target_user.example.com这个域名能被Nginx解析到,或者你已经在hosts文件里配置了对应的映射。

备注:内容来源于stack exchange,提问作者user1505698

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 11:24:51