kvz*_*kvz 5 nginx reverse-proxy url-routing haproxy
假设我有项目 A、B 和 C。我有两个后端服务器:server01 和 server02。
项目 A 可以由 server01 处理,项目 B 和 C 可以由 server02 处理。添加和删除新项目和服务器,我们以编程方式更新文件、Redis、Memcache 或类似文件(无论代理支持什么)中项目 ID 和后端服务器之间的哈希表。
我可以制作一个前端,例如/items/${id}基于 HAProxy 路由到正确的后端服务器${id}吗?那么通过查找什么 id 与什么服务器相关联?
如果没有,Nginx 能做到这一点吗?
您可以使用地图使其工作。
这是一个完美的概括后的HAProxy.com博客。它们基于Host标头进行映射,但更改配置以适用于 URL 是微不足道的。
这里的一个额外好处是您可以使用http-[request|response] [set-map|del-map]关键字或通过管理套接字动态添加和删除映射条目。
使用http-[request|response]或通过套接字所做的更改不会在重新启动之间持续存在,因此您希望有一些带外进程来同时更新地图文件,但这是另一个问题。
假设每个服务器都有一个后端,并给出了一个/etc/haproxy/items.map包含以下内容的映射文件:
#itemPath backendname
/item/a bk_server01
/item/b bk_server02
/item/c bk_server02
Run Code Online (Sandbox Code Playgroud)
你会在你的前端做这样的事情:
frontend ft_items
[...]
use_backend %[path,lower,map(/etc/haproxy/items.map,bk_default)]
Run Code Online (Sandbox Code Playgroud)
如果您在同一后端有两台服务器,您将在前端编写一个 ACL 来捕获所有项目 ( acl items path_beg /items),将它们发送到后端 ( use_backend servers if items) 并use_backend用适当的 if 语句use_server行替换前端的行后端。
是的,您可以使用 HAProxy 轻松做到这一点。只需创建一个带有服务器提供的 ID 列表的 ACL,并将其应用于 use-server 指令。IE:
acl server1-ids path_beg -i /items/id1 /istems/id2
use-server server1 if server1-ids
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3855 次 |
| 最近记录: |