nginx配置ip_hash负载均衡策略

一、nginx配置ip_hash负载均衡策略

nginx默认的负载均衡策略为轮询,某些场景需要使用ip_hash负载策略,即:同一个ip地址,永远访问nginx后面同一台tomcat。配置示例如下,主要是设置ip_hash:

	upstream www.abc.com{
		ip_hash;
		server 202.119.11.23:8899;
		server 172.168.10.99:8899;
		server 202.119.11.121:8899;
	}

二、配置后如何验证ip_hash有没有生效

1、需要打开nginx的access log查看请求来自哪个ip、访问哪个负载。

(1)首先,配置access日志格式;

(2)其次,打开access日志;

(3)验证后注意关闭access日志。

2、完整示例如下


#表示使用几个nginx线程,一般取值为cpu个数-1
worker_processes  1;

#是否打开error日志,及error日志路径
error_log  logs/error.log;


#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;
    client_max_body_size 2048m;


	#access日志格式
	log_format  log_custom  '$remote_addr - $remote_user [$time_local] "$server_addr" "$upstream_addr" $status "$request" --- '
                      '$body_bytes_sent --- "$http_referer" ---'
                      '"$http_user_agent" --- "$http_x_forwarded_for"';
					  
	#开启access日志,及指定日志格式。注意:开始access日志方式是如下方式,并不是access_log on方式;关闭access日志方式是:access_log off;
    access_log  logs/access.log log_custom;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;


	upstream www.abc.com{
		ip_hash;
		server 202.119.11.23:8899;
		server 172.168.10.99:8899;
		server 202.119.11.121:8899;
	}
	
    server {
        listen       80;
        server_name  localhost;

        location ^~ /api-base {
            proxy_http_version 1.1;
            proxy_redirect off;
            proxy_set_header Connection "";
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass http://www.abc.com;
        }
    }
}

3、对应的日志效果

三、ip_hash算法对应的java代码示例

package com.nation.net;

import java.net.InetAddress;
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;

/**
 * nginx ip_hash算法示例
 *
 */
public class IpHashLoadBalancer {
    private final List<String> servers;
    private final AtomicInteger currentIndex = new AtomicInteger(0);

    public IpHashLoadBalancer(List<String> servers) {
        this.servers = servers;
    }

    public String selectServer(String clientIp) {
        try {
            // 将客户端IP地址转换为字节数组
            byte[] ipBytes = InetAddress.getByName(clientIp).getAddress();

            // 使用MD5算法计算哈希值
            byte[] hashBytes = java.security.MessageDigest.getInstance("MD5").digest(ipBytes);

            // 将哈希值转换为正整数
            int hash = 0;
            for (byte b : hashBytes) {
                hash <<= 8;
                hash ^= (b & 0xFF);
            }

            // 使用哈希值选择服务器
            int serverIndex = Math.abs(hash) % servers.size();

            // 如果有必要,可以在这里实现一个轮询机制,使得下一次请求可能选择另一个服务器
            // currentIndex.incrementAndGet();
            // int serverIndex = currentIndex.getAndIncrement() % servers.size();

            return servers.get(serverIndex);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    public static void main(String[] args) {
        //负载地址
        List<String> servers = Arrays.asList("202.119.11.23","172.168.10.99","202.119.11.121");
        IpHashLoadBalancer loadBalancer = new IpHashLoadBalancer(servers);

        // 假设客户端IP地址
        String clientIp = "172.168.10.187";

        // 选择服务器
        String selectedServer = loadBalancer.selectServer(clientIp);

        System.out.println("Selected server: " + selectedServer);
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/572045.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

机器视觉系统-工业光源什么是高角度光,以及发光角度得分类

光路描述&#xff1a;光线与水平面角度>45称为高角度光。 效果分析&#xff1a;高角度照射&#xff0c;光线经 被测物表面平整部分反射后进入镜头&#xff0c;图像效果表现为灰度值较高&#xff1b;不平整部分反射光进入不了镜头&#xff0c;图像效果表现为灰度值较低。 主要…

【Vue】自定义事件实现组件之间的通信(案例讲解)

一、前言 这是部分哔哩哔哩上跟着一个博主【遇见狂神说】学习的&#xff0c;当然自己也是才开始学习的vue&#xff0c;在学到这个Vue的自定义事件的时候&#xff0c;虽然知识点很绕&#xff0c;但是在理解后又觉得很意思&#xff0c;觉得Vue真的很强大。这里博主将自己学习到的…

2、选择什么样的机器人本体

如果说世界是物质的&#xff0c;那么应该先制造出机器人的本体&#xff0c;再让她产生灵魂。如果是精神的呢&#xff0c;世界是无中生有的呢&#xff0c;那就先在仿真中研究算法吧。 而我比较崇尚初中哲学的一句话&#xff0c;世界是物质的&#xff0c;物质是运动的&am…

[已测试]TVBox二次开发影视系统酷点1.4.4反编译版本

支持p2p, 磁力等播放 支持多仓切换vip线路 自动换源开关 启动时直接进入直播 原始轮播图和幻灯片切换 加大防抓包的可能性 支持安卓4.x版本 源码下载&#xff1a;https://download.csdn.net/download/m0_66047725/89084105 更多资源下载&#xff1a;关注我。

科技改变视听4K 120HZ高刷新率的投影、电视、电影终有用武之地

早在1888年&#xff0c;法国生理学家埃蒂安朱尔马莱就发明了一套盒式摄像机&#xff0c;能以120帧/s的速度在一条纸膜上曝光照片&#xff0c;但是当时没有相匹配的放映设备。而马莱的另一套拍摄设备是60帧/s的规格&#xff0c;并且图像质量非常好。 受此启发&#xff0c;雷诺的…

CobaltStrike使用插件实现免杀

免责声明&#xff1a;本工具仅供安全研究和教学目的使用&#xff0c;用户须自行承担因使用该工具而引起的一切法律及相关责任。作者概不对任何法律责任承担责任&#xff0c;且保留随时中止、修改或终止本工具的权利。使用者应当遵循当地法律法规&#xff0c;并理解并同意本声明…

编译一个基于debian/ubuntu,centos,arhlinux第三方系统的问题解答

如果是开机卡boot注意看前面几行会有错误提示&#xff0c;一般会比较好找&#xff0c;下面是过了kernel内核加载后出现的问题 目录 上一篇文章 第一个问题 错误原因 解决办法 第二个问题 注意 第三个问题 上一篇文章 编译一个基于debian/ubuntu,centos,arhlinux第三方系…

【Linux网络】FTP服务

目录 一、FTP简介 1.FTP-文件传输协议 2.FTP的两种模式 二、安装配置FTP 1.安装环境 2.对文件的操作 3.切换目录 4.设置匿名用户 5.图形化界面登录 6.白名单与黑名单 重点与难点 一、FTP简介 1.FTP-文件传输协议 FTP是FileTransferProtocol&#xff08;文件传输协…

(十) 盘古UI,详情小标题副标题的实现,方便快速开发详情PanguFormTitle!

(十) 盘古UI,详情小标题副标题的实现,方便快速开发详情PanguFormTitle! 盘古UI,较为全面的自定义UI框架,帮助你绝对的快速开发!(长期维护中) 控件位置: com.smart.pangu_ui_lib.widget.PanguFormTitle demo地址,点击查看github 详情|表单的小标题 可以在详情或者表单的页面…

MapMagic 2 Biomes and Functions

MapMagic 2(免费)世界生成器官方模块。支持基于遮罩混合几个图形,从而可以在无限地形上混合不同的生物群落。也随附函数节点,从而可以在子图中执行复杂的生成过程。将它们视作含有输入和输出连接器的生物群落。请注意,必须使用 MapMagic 2 的现有安装才能使用该模块。 下…

护眼台灯哪个牌子最好?消费者信赖之选护眼灯十大品牌推荐

孩子入学后&#xff0c;对其的关注和照料必须加倍。特别是眼睛的健康&#xff0c;在学习过程中显得尤为关键。为了减轻孩子的眼睛疲劳&#xff0c;降低近视的风险&#xff0c;选择一款优质的护眼台灯至关重要。护眼台灯哪个牌子最好&#xff1f;目前市场上书客、飞利浦、松下等…

微信小程序中,plugins 配置项如何配置

在微信小程序中&#xff0c;plugins 配置项用于声明小程序需要使用的第三方插件。以下是如何配置 plugins 的基本步骤&#xff1a; 获取插件的AppID和版本信息&#xff1a; 首先&#xff0c;你需要在微信开放平台或微信公众平台上找到你需要的插件&#xff0c;并获取其AppID和版…

【漏洞复现】泛微e-office系统ajax.php接口存在任意文件上传漏洞

漏洞描述 泛微e-office系统是标准、易用、快速部署上线的专业协同OA软件。泛微 E-Office 9.5版本存在代码问题漏洞,泛微e-office系统ajax.php接口存在任意文件上传漏洞 免责声明 技术文章仅供参考,任何个人和组织使用网络应当遵守宪法法律,遵守公共秩序,尊重社会公德,…

大模型推理优化之 KV Cache

原文&#xff1a;https://zhuanlan.zhihu.com/p/677660376 目录 收起 KV Cache 定义 KV Cache 原理 KV Cache 实现 KV Cache 显存占用分析 KV Cache 优化方法 在语言模型推理的过程中&#xff0c;性能优化一直是一个备受关注的话题。LLM&#xff08;Large Language Mode…

基于stm32的UART高效接收DMA+IDLE编程示例

目录 基于stm32的UART高效接收DMAIDLE编程示例实验目的场景使用原理图UART的三种编程方式IDLE程序设计串口配置配置中断配置DMA代码片段本文中使用的测试工程 基于stm32的UART高效接收DMAIDLE编程示例 本文目标&#xff1a;基于stm32_h5的freertos编程示例 按照本文的描述&am…

训练营第三十三天贪心(第五部分重叠区间问题)

训练营第三十三天贪心&#xff08;第五部分重叠区间问题&#xff09; 435.无重叠区间 力扣题目链接 题目 给定一个区间的集合 intervals &#xff0c;其中 intervals[i] [starti, endi] 。返回 需要移除区间的最小数量&#xff0c;使剩余区间互不重叠 。 示例 1: 输入: …

MySQL多版本并发控制mvcc原理浅析

文章目录 1.mvcc简介1.1mvcc定义1.2mvcc解决的问题1.3当前读与快照读 2.mvcc原理2.1隐藏字段2.2版本链2.3ReadView2.4读视图生成原则 3.rc和rr隔离级别下mvcc的不同 1.mvcc简介 1.1mvcc定义 mvcc(Multi Version Concurrency Control)&#xff0c;多版本并发控制&#xff0c;是…

Kubeedge:Metamanager源码速读(不定期更新)

Kubeedge源码版本&#xff1a;v1.15.1 在看Metamanager之前&#xff0c;先看一下Metamanager源码的目录结构&#xff08;位于edge/pkg下&#xff09;和官方文档&#xff1a; 目录结构如下面的两张图所示。请忽略绿色的文件高亮&#xff0c;这是Jetbrains goland对未提交修改的…

【教程】MySQL数据库学习笔记(五)——约束(持续更新)

写在前面&#xff1a; 如果文章对你有帮助&#xff0c;记得点赞关注加收藏一波&#xff0c;利于以后需要的时候复习&#xff0c;多谢支持&#xff01; 【MySQL数据库学习】系列文章 第一章 《认识与环境搭建》 第二章 《数据类型》 第三章 《数据定义语言DDL》 第四章 《数据操…

【求助】西门子S7-200PLC定时中断+数据归档的使用

前言 已经经历了种种磨难来记录我的数据&#xff08;使用过填表程序、触摸屏的历史记录和数据归档&#xff09;之后&#xff0c;具体可以看看这篇文章&#xff1a;&#x1f6aa;西门子S7-200PLC的数据归档怎么用&#xff1f;&#xff0c;出现了新的问题。 问题的提出 最新的…