一次有趣的nginx Tcp4层代理转发的试验

nginx主配置文件添加配置:

stream {log_format proxy '$remote_addr [$time_local] ''$protocol status:$status bytes_sent:$bytes_sent bytes_received:$bytes_received ''$session_time upstream_addr:"$upstream_addr" ''"$upstream_bytes_sent" "$upstream_bytes_received" "$upstream_connect_time"';include /etc/nginx/tcp_conf.d/*.conf;
}

虚拟主机的配置

server {listen 39000;proxy_pass test_backend_for_health;proxy_connect_timeout 10s;proxy_timeout 10s;access_log /var/log/nginx/test.log proxy;open_log_file_cache off;
}upstream test_backend_for_health {server 192.168.2.82:10001 max_fails=2 fail_timeout=30s weight=2;server 192.168.2.82:10002 max_fails=2 fail_timeout=30s weight=2;server 192.168.2.82:10003 max_fails=2 fail_timeout=30s weight=2;
}

应用程序的模仿

python3脚本

# coding: utf8
import socket
import sys
port=int(sys.argv[1])def simple_tcp_server(host='192.168.2.82', port=port, reply_message="Hello from server!"):# 创建一个socket对象with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:s.bind((host, port))print(f'Server started on port {port}...')s.listen(1)while True:conn, addr = s.accept()with conn:print(f'Connected by {addr}')while True:data = conn.recv(1024)if not data:breaktry:print("Received:", data.decode())except Exception as e:print(e)conn.sendall(reply_message.encode())if __name__ == "__main__":simple_tcp_server()

脚本编写好之后,打开3个终端,运行3次python脚本,参数分别为10001/10002/10003。

启动nginx之后,开始模拟做一次tcp请求

telnet localhost 39000

可以看到日志如下:

关闭其中一个python脚本,比如10003这个,多请求几次会发现,nginx的日志变成如下的样子:

 也就是说nginx会先转发一次请求给后端10003,在发现10003失败之后,立即转发给了剩余两台后端应用中的一个,并且把这次请求的过程也给记录了下来,也就是$upstream_bytes_received这个参数打印的内容。

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

C#,入门教程(05)——Visual Studio 2022源程序(源代码)自动排版的功能动画图示

上一篇: C#,入门教程(04)——Visual Studio 2022 数据编程实例:随机数与组合https://blog.csdn.net/beijinghorn/article/details/123533838 新来的徒弟们交上来的C#代码,可读性往往很差。 今天一问才知道,他们居然不…

2种方法,教你使用Python实现接口自动化中的参数关联

通常在接口自动化中,经常会参数关联的问题,那么什么是参数关联? 参数关联就是上一个接口的返回值会被下一个接口当做参数运用,其中Python中可以实现参数关联的方法有很多种,今天小编给大家介绍下,如何通过…

静态初始化数组-数组的遍历

目录 什么是遍历? 为什么要遍历数组? 案例 需求: 分析: 代码实现 什么是遍历? 遍历:就是一个一个数据的访问。 为什么要遍历数组? 比如:数据的求和、元素的搜索、找最大值和…

2024 CKS 题库 | 10、Trivy 扫描镜像安全漏洞

不等更新题库 CKS 题库 10、Trivy 扫描镜像安全漏洞 Task: 使用 Trivy 开源容器扫描器检测 namespace kamino 中 具有严重漏洞的镜像 的 Pod。 查找具有 High 或 Critical 严重性漏洞的镜像,并删除使用这些镜像的 Pod 。 注意:Trivy 仅安装在 cluste…

Kubernetes Prometheus 系列|Prometheus介绍和使用|Prometheus+Grafana集成

目录 第1章Prometheus 入门1.1 Prometheus 的特点1.1.1 易于管理1.1.2 监控服务的内部运行状态1.1.3 强大的数据模型1.1.4 强大的查询语言 PromQL1.1.5 高效1.1.6 可扩展1.1.7 易于集成1.1.8 可视化1.1.9 开放性 1.2 Prometheus 的架构1.2.1 Prometheus 生态圈组件1.2.2 架构理…

这才开工没几天收到Offer了,简历改的好,找工作没烦恼。

喜报喜报 这才开工没几天,就收到了喜报! 就像上面截图中所说的一样:简历改了真的有用。 我也和大家分享一下优化简历的技巧,希望对大家有帮助,把握住金三银四的机会,都能顺利上岸,升职加薪&am…

如何申请代码签名证书?

代码签名证书是一种关键的数字证书,它的功能在于为软件代码提供安全签名和验证服务,从而提升软件整体的安全性和用户信任度。获取代码签名证书的过程通常涉及多个严谨步骤,确保通过正式流程获得的证书能有效加强软件完整性和真实性保护。以下…

数据库管理和设计工具Navicat 介绍

Navicat:一款强大的数据库管理和设计工具 Navicat 是一款广受欢迎的数据库管理和设计工具,它支持多种数据库系统,如 MySQL、MariaDB、SQL Server、Oracle、PostgreSQL 以及 SQLite。凭借其直观的用户界面和强大的管理功能&#xff0c…

R语言空间分析、模拟预测与可视化

随着地理信息系统(GIS)和大尺度研究的发展,空间数据的管理、统计与制图变得越来越重要。R语言在数据分析、挖掘和可视化中发挥着重要的作用,其中在空间分析方面扮演着重要角色,与空间相关的包的数量也达到130多个。在本…

尾矿库安全监测系统的主要内容和平台

一、背景 尾矿库安全监测系统是保障尾矿库安全运行的重要手段,通过对尾矿库进行实时监测,可以及时发现潜在的安全隐患,为采取相应的措施提供科学依据。通过对变形因素、相关因素及诱因因素信息的相关分析处理,对灾变体的稳定状态…

Pytorch学习(杂知识)

Mini-batch Mii-batch是一种在机器学习中常用的训练算法。它是将大的数据集分成一些小的数据集,每次只用一个小的数据集来训练模型。通常情况下,训练数据集中的数据越多,训练出的模型越准确,但是如果数据集太大,就会导…

试用nebulagraph

按照手册的快速入门&#xff0c;本地部署操作&#xff0c;基本没什么问题。有一些注意事项NebulaGraph Database 手册 (nebula-graph.com.cn) 默认安装路径在/usr/local/nebula ip的问题 在步骤3的时候 $ ./nebula-console -addr <ip> -port <port> -u <use…

android studio模拟器不能打开

Andriod:The selected AVD is currently running in the Emulator. Please exit the emulator instance… 1.点击 2.删除下面文件 3.重新打开即可 参考

springcloud:2.OpenFeign 详细讲解

OpenFeign 是一个基于 Netflix 的 Feign 库进行扩展的工具,它简化了开发人员在微服务架构中进行服务间通信的流程,使得编写和维护 RESTful API 客户端变得更加简单和高效。作为一种声明式的 HTTP 客户端,OpenFeign 提供了直观的注解驱动方式,使得开发人员可以轻松定义和调用…

【前端素材】推荐优质后台管理系统Xoric平台模板(附源码)

一、需求分析 当我们从多个层次来详细分析后台管理系统时&#xff0c;可以将其功能和定义进一步细分&#xff0c;以便更好地理解其在不同方面的作用和实际运作。 1. 功能层次 a. 用户管理功能&#xff1a; 用户注册和登录&#xff1a;管理用户账户的注册和登录过程。权限管…

简单了解USB通信协议

目录 一、拓扑结构 二、逻辑部件 三、电气特性 四、插入检测机制 五、描述符 六、枚举过程 七、传输数据的层次结构 八、包 1.包的类型&#xff1a; 2.包的组成&#xff1a; 3.数据包类型的pid切换机制&#xff08; data pid toggle &#xff09; 九、事务 十、传输…

统计图玫瑰图绘制方法

统计图玫瑰图绘制方法 常用的统计图有条形图、柱形图、折线图、曲线图、饼图、环形图、扇形图。 前几类图比较容易绘制&#xff0c;饼图环形图绘制较难。 还有一种玫瑰图的绘制也较难&#xff0c;今提供玫瑰图的绘制方法供参考。 本方法采用C语言的最基本功能&#xff1a; &am…

C++ 学习之Set容器

C++ Set容器构造和赋值 在C++中,std::set是一个用于存储唯一元素的有序集合容器。下面介绍一下std::set容器的构造和赋值操作: 构造 std::set 默认构造函数: std::set<int> mySet; // 创建一个空的set使用初始化列表构造: std::set<int> mySet

测试开源C#人脸识别模块DlibDotNet

百度“C# 换脸”找到参考文献4&#xff0c;发现其中使用DlibDotNet检测并识别人脸&#xff08;之前主要用的是ViewFaceCore&#xff09;&#xff0c;DlibDotNet是Dlib的.net封装版本&#xff0c;后者为开源C工具包&#xff0c;支持机器学习算法、图像处理等算法以支撑各类高级应…

Camtasia Studio2024官方版电脑屏幕录制及视频编辑软件功能使用全面介绍

Camtasia Studio——屏幕录制与视频编辑的全能之选 Camtasia Studio是一款集屏幕录制和视频编辑于一体的强大软件&#xff0c;它凭借直观的操作界面和丰富的功能&#xff0c;成为了许多教育工作者、内容创作者以及视频编辑爱好者的首选工具。 Camtasia2024win-安装包下载如下:…