我们知道HAProxy和Nginx可以在上游执行基于URL的哈希,但是我们如何对URL的部分进行哈希处理。
我们有4个后端原始图像服务器,每个都将存储所有原始大尺寸图像文件。映像服务器将根据用户请求动态调整文件大小。 (Tomcat Java将文件加载到内存中并调整大小然后响应)
原始文件是:
http://imageserver.company.com/path/to/imageA.jpg
最终用户将要求:
httpurl://imageserver.company.com/path/to/imageA.jpg/crop/400x300.jpg
httpurl://imageserver.company.com/path/to/imageA.jpg/400x224.jpg
httpurl://imageserver.company.com/path/to/imageA.jpg/1280x720.jpg
我希望HAProxy和Nginx会在" /path/to/imageA.jpg" ;;
上执行哈希Hash (substring (url, 0, find (url, ".jpg/")
有关如何配置的想法吗?
答案 0 :(得分:0)
在nginx中,您可以使用map和upstream::hash指令:
map $uri $image_hash {
default $uri;
"~(?<image_path>.+(?:jpg|png))/" $image_path;
}
upstream image_backends {
hash $image_hash;
server server1;
server server2;
server server3;
server server4;
}
server {
...
location / {
# add debug header to view the hash
add_header ImageHash $image_hash;
proxy_pass http://image_backends;
}
}
我不确定HAProxy的确切语法是什么,但它的uri哈希支持指定URI哈希的“depth”。因此,如果URL的原始路径具有固定的深度,那么您可以使用它(虽然我猜不是这样)?
The "depth" parameter indicates the maximum directory depth to be used to compute the hash. One level is counted for each slash in the request. If both parameters are specified, the evaluation stops when either is reached.