"例如请求的url为http://www.a.com/{path_var1}/{path_var2}
path_var1和path_var2是两个path variable
如果现在只想根据path_var1来做路由,即path_var1相同的请求落在同一台服务器上,应当怎么配置呢?"

如上同学问我的问题,我们都知道nginx的负载均衡,可以支持很多hash方式,对于指定url中的内容进行hash ,接下来我用一个场景来模拟:

1. 场景描述
场景大概就是这样,当url请求过来时候,通过url中的一个特定数值,进行提取,然后进行hash

2. 配置
1、为了简单实现场景测试,我在nginx中,只作了简单的配置,如下:

server {
listen 80;
server_name defualt www.jesonc.com;
location / {
proxy_pass http://www_jesonc;
index index.html index.htm;
}
} upstream www_jesonc {
server 127.0.0.1:5000;
server 127.0.0.1:5001;
server 127.0.0.1:5002;
} server {
listen 5000;
server_name defualt www.jesonc.com; location / {
root /opt/app/code4;
#random_index on;
index index.html index.htm;
}
}
server {
listen 5001;
server_name defualt www.jesonc.com; location / {
root /opt/app/code5;
index index.html index.htm;
}
}
server {
listen 5002;
server_name defualt www.jesonc.com; location / {
root /opt/app/code6;
index index.html index.htm;
}
}

2、新建目录,建立index页面

[root@Jeson-at-imoocc conf.d]# mkdir /opt/app/code4/11231/2131/ -p
[root@Jeson-at-imoocc conf.d]# mkdir /opt/app/code4/3123/5345/ -p
[root@Jeson-at-imoocc conf.d]# mkdir /opt/app/code4/6666/5347/ -p [root@Jeson-at-imoocc conf.d]# cp /opt/app/code/jesonc.html /opt/app/code4/11231/2131/index.html
[root@Jeson-at-imoocc conf.d]# cp /opt/app/code/jesonc.html /opt/app/code4/3123/5345/index.html
[root@Jeson-at-imoocc conf.d]# cp /opt/app/code/jesonc.html /opt/app/code4/6666/5347/index.html
//编辑index页面,使内容有区别
[root@Jeson-at-imoocc conf.d]# vim /opt/app/code4/3123/5345/index.html
[root@Jeson-at-imoocc conf.d]# vim /opt/app/code4/6666/5347/index.html
[root@Jeson-at-imoocc conf.d]# vim /opt/app/code4/3123/5345/index.html
//拷贝目录
[root@Jeson-at-imoocc app]# cp -r code4 code5
[root@Jeson-at-imoocc app]# cp -r code4 code6
//编辑index页面,使内容有区别
vim /opt/app/code4/6666/5347/index.html
vim /opt/app/code5/6666/5347/index.html
vim /opt/app/code6/6666/5347/index.html

3. 自定义hash key的方式
这样,我们需要设置的就是,当用户访问http://www.jesonc.com/6666/5347/index.html
我们通过哈希url中的6666,固定访问一个server

设置,改动如下:

    if ( $uri ~* "^\/([^\/]+)\/.*" ){
set $defurlkey $1;
} upstream www_jesonc {
hash $defurlkey;
server 127.0.0.1:5000;
server 127.0.0.1:5001;
server 127.0.0.1:5002;
}

4. 测试
1、在没有加入hash key之前,访问http://www.jesonc.com/6666/5347/
页面将,不断轮训展示不同信息。
2、设置完成hash key之后,访问:http://www.jesonc.com/6666/5347/
固定到一个信息页面上:

Nginx负载均衡-如何自定义URL中的hash key的更多相关文章

  1. Nginx负载均衡-如何自定义URL中的hash key2

    upstream backend1 {            server 192.168.3.236:555;            server 192.168.3.236:222;        ...

  2. Nginx负载均衡的max_fails和fail_timeout的默认配置问题

    今天发现一个奇怪的现象,前端请求后端服务多次后会超时一次,经过多次验证确定是大概10s左右就会超时一次,检查后端服务,发现其中一个节点已经夯死. 但是我们的nginx负载均衡策略是轮询机制,按照配置来 ...

  3. Nginx反向代理 负载均衡 页面缓存 URL重写及读写分离

    大纲 一.前言 二.环境准备 三.安装与配置Nginx 四.Nginx之反向代理 五.Nginx之负载均衡 六.Nginx之页面缓存 七.Nginx之URL重写 八.Nginx之读写分离 注,操作系统 ...

  4. nginx+php负载均衡集群环境中的session共享方案梳理

    在网站使用nginx+php做负载均衡情况下,同一个IP访问同一个页面会被分配到不同的服务器上,如果session不同步的话,就会出现很多问题,比如说最常见的登录状态. 下面罗列几种nginx负载均衡 ...

  5. Nginx负载均衡中后端节点服务器健康检查的操作梳理

    正常情况下,nginx做反向代理,如果后端节点服务器宕掉的话,nginx默认是不能把这台realserver踢出upstream负载集群的,所以还会有请求转发到后端的这台realserver上面,这样 ...

  6. Nginx+PHP负载均衡集群环境中Session共享方案 - 运维笔记

    在网站使用nginx+php做负载均衡情况下,同一个IP访问同一个页面会被分配到不同的服务器上,如果session不同步的话,就会出现很多问题,比如说最常见的登录状态. 下面罗列几种nginx负载均衡 ...

  7. nginx负载均衡中常见的算法及原理有哪些?

    一.nginx负载均衡常用算法 1.1 轮询 轮询,nginx默认方式.一次将请求分配给各个后台服务器. upstream backserver { server 10.0.0.7; server 1 ...

  8. nginx负载均衡集群中的session共享说明

    在网站使用nginx+php做负载均衡情况下,同一个IP访问同一个页面会被分配到不同的服务器上,如果session不同步的话,就会出现很多问题,比如说最常见的登录状态. 下面罗列几种nginx负载均衡 ...

  9. Nginx负载均衡中后端节点服务器健康检查的一种简单方式

    摘自:https://cloud.tencent.com/developer/article/1027287 一.利用nginx自带模块ngx_http_proxy_module和ngx_http_u ...

随机推荐

  1. element-ui upload上传组件问题记录

    element-ui upload上传组件遇到的问题

  2. Python学习之--用户输入以及运算

    一. 用户输入:input 1. 函数input() 让程序暂停运行,等待用户输入一些文本. 2.使用int()将字符串转为数值 二.运算:+-*. 1.求模运算符 (%)将两个数相除并返回余数: 2 ...

  3. 35、sparkSQL及DataFrame

    一.saprkSQL背景 Spark 1.0版本开始,推出了Spark SQL.其实最早使用的,都是Hadoop自己的Hive查询引擎:但是后来Spark提供了Shark:再后来Shark被淘汰,推出 ...

  4. Mac下打开/usr/local目录

    Mac下/usr/local目录默认是对于Finder是隐藏,如果需要到/usr/local下去,打开Finder,然后使用command+shift+G,在弹出的目录中填写/usr/local就可以 ...

  5. [php]Windows环境下Composer的安装教程

    方法一: 下载Composer-Setup.exe后安装,它会自动搜索 php.exe 路径, 如果找不到,则手动添加路径.   Windows安装Composer 方法二: 如果出现如下错误,说明伟 ...

  6. Codeforces 1172D. Nauuo and Portals 构造

    原文链接www.cnblogs.com/zhouzhendong/p/CF1172D.html 前言 明哥神仙打cf方式真潇洒.45分钟切D后就不打了? 我当场爆肝D想错方向不会做自闭了. 题解 考虑 ...

  7. P5024 保卫王国(动态dp/整体dp/倍增dp)

    做法(倍增) 最好写的一种 以下0为不选,1为选 \(f_{i,0/1}\)为\(i\)子树的最小值,\(g_{i,0/1}\)为除i子树外的最小值 \(fh_{i,j,0/1,0/1}\)为确定\( ...

  8. ICEM-管肋

    原视频下载地址:https://yunpan.cn/cMgkmd7u9ZPdC  访问密码 8a73

  9. De1ctf - shell shell shell记录

    虽然是N1CTF原题,但是自己没遇见过,还是做的题少,记录一下吧== 1.源码泄露,直接可以下到所有源码,然后代码审计到一处insert型注入: 这里直接带入insert里面,跟进去看看 insert ...

  10. #C++初学记录#日常学习函数

    静态变量static,只进行一次初始化. #include<cstring> #include<iostream> using namespace std; int main( ...