如何将来自相同 url 路径的流量拆分到 2 个不同的上游?
how to split traffic from same url path to 2 different upstreams?
我声明了这些上游:
upstream upstream_1 {
server some_container_1:8000;
}
upstream upstream_2 {
server some_container_2:8001;
}
和这个服务器:
server {
listen 7000;
server_name localhost;
location /path {
uwsgi_pass upstream_1;
}
}
其中 some_container_1
和 some_container_2
都基于相同的图像(因此在相同的路径上提供相同的 api)但在环境变量和其他不相关的东西上有所不同。我想分叉所有流量的 1% 从 localhost:7000/path
传送到 'as is' 到 upstream_2
,99% 留在 upstream_1
。这两种情况都应保持收到的请求,既不改变路径也不改变 headers
with split_clients 我可以在将请求转发到单个上游之前分叉将设置的路径,这不是我的情况。
here 分叉是在服务器之间的上游内部完成的,而不是像我需要的那样在上游之间的位置分裂内完成的。
我可以定义上游的上游吗
upstream compound_upstream_1 {
upstream upstream_1 weight=99;
upstream upstream_2;
}
用于
server {
listen 7000;
server_name localhost;
location /path {
uwsgi_pass compound_upstream_1;
}
nginx 可以吗?考虑到这一点,哪种方式应该是实现这一目标的标准?
也许可以使用负载均衡器来完成此操作:https://docs.nginx.com/nginx/admin-guide/load-balancer/http-load-balancer/
我不确定你的“1%”场景的权重是多少,但你可以玩弄它并根据自己的喜好进行调整。
我不明白,是什么阻止你直接在上游块中使用服务器名称?
upstream compound_upstream_1 {
server some_container_1:8000 weight=99;
server some_container_2:8001;
}
server {
listen 7000;
server_name localhost;
location /path {
uwsgi_pass compound_upstream_1;
}
}
或者我误解了你的问题?
我声明了这些上游:
upstream upstream_1 {
server some_container_1:8000;
}
upstream upstream_2 {
server some_container_2:8001;
}
和这个服务器:
server {
listen 7000;
server_name localhost;
location /path {
uwsgi_pass upstream_1;
}
}
其中 some_container_1
和 some_container_2
都基于相同的图像(因此在相同的路径上提供相同的 api)但在环境变量和其他不相关的东西上有所不同。我想分叉所有流量的 1% 从 localhost:7000/path
传送到 'as is' 到 upstream_2
,99% 留在 upstream_1
。这两种情况都应保持收到的请求,既不改变路径也不改变 headers
with split_clients 我可以在将请求转发到单个上游之前分叉将设置的路径,这不是我的情况。
here 分叉是在服务器之间的上游内部完成的,而不是像我需要的那样在上游之间的位置分裂内完成的。
我可以定义上游的上游吗
upstream compound_upstream_1 {
upstream upstream_1 weight=99;
upstream upstream_2;
}
用于
server {
listen 7000;
server_name localhost;
location /path {
uwsgi_pass compound_upstream_1;
}
nginx 可以吗?考虑到这一点,哪种方式应该是实现这一目标的标准?
也许可以使用负载均衡器来完成此操作:https://docs.nginx.com/nginx/admin-guide/load-balancer/http-load-balancer/
我不确定你的“1%”场景的权重是多少,但你可以玩弄它并根据自己的喜好进行调整。
我不明白,是什么阻止你直接在上游块中使用服务器名称?
upstream compound_upstream_1 {
server some_container_1:8000 weight=99;
server some_container_2:8001;
}
server {
listen 7000;
server_name localhost;
location /path {
uwsgi_pass compound_upstream_1;
}
}
或者我误解了你的问题?