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

如何通过Nginx配置实现按1:9请求比例转发至不同URL路径的后端服务器?

这个需求我之前帮朋友配置过,用Nginx的split_clients模块就能完美实现按比例分流,同时适配不同后端的路径要求。下面给你一步步拆解配置和注意事项:

配置方案详解

1. 核心分流逻辑

Nginx的split_clients模块可以通过哈希请求变量(比如客户端IP、请求URI等)来按比例分配请求到不同分组,刚好符合你10%/90%的分流需求。我们先定义一个分组变量,再根据变量值转发到对应后端。

2. 完整配置示例

根据你对请求路径的处理需求,分两种常见场景给出配置:

场景1:原请求URI追加到后端固定路径后

比如用户访问xyzzy.com/test/page,10%的情况转发到xyz-1.com/123/xyz/andsoon/test/page,剩余90%转发到xyz-2.com/456/456/andsoon/test/page:

http {
    # 基于客户端IP哈希分配,确保同一客户端请求尽量稳定分到同一后端(可选,换$request_uri可实现完全随机分流)
    split_clients "${remote_addr}" $backend_group {
        10%    backend1;
        *      backend2;
    }

    server {
        listen 80;
        server_name xyzzy.com;

        location / {
            # 根据分组变量选择对应后端
            if ($backend_group = backend1) {
                proxy_pass http://xyz-1.com/123/xyz/andsoon;
            }
            if ($backend_group = backend2) {
                proxy_pass http://xyz-2.com/456/456/andsoon;
            }

            # 必须配置的代理头部,确保后端能正确识别请求来源
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    }
}

场景2:忽略原请求URI,直接转发到后端固定路径

不管用户访问xyzzy.com下的任何路径,都转发到后端的固定地址(比如xyz-1.com/123/xyz/andsoon):

http {
    split_clients "${remote_addr}" $backend_group {
        10%    backend1;
        *      backend2;
    }

    server {
        listen 80;
        server_name xyzzy.com;

        location / {
            if ($backend_group = backend1) {
                # 重写URI到后端固定路径,break表示停止后续重写规则
                rewrite ^/(.*)$ /123/xyz/andsoon break;
                proxy_pass http://xyz-1.com;
            }
            if ($backend_group = backend2) {
                rewrite ^/(.*)$ /456/456/andsoon break;
                proxy_pass http://xyz-2.com;
            }

            # 同样保留代理头部配置
            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. 关键注意事项

  • split_clients的比例是近似值:基于哈希算法分配,请求量越大,实际比例越接近设定的10%/90%,小流量下可能有轻微波动。
  • 变量选择:如果不需要会话保持(同一客户端请求不用固定到同一后端),可以把${remote_addr}换成${request_uri}或${time_iso8601},实现完全随机的分流。
  • 配置校验:每次修改后,一定要用nginx -t检查语法是否正确,确认无误后用nginx -s reload生效配置。
  • if指令的安全性:这里的if只是简单的变量匹配,属于Nginx官方推荐的安全用法,不会有性能或逻辑问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 23:37:27