Nginx TCP 负载均衡:stream 模块配置
工作上遇到需要用nginx做负载均衡,参考了前同事留下的作业顺利搞定,感觉这块很有意义写篇文档记录。
参考:nginx tcp负载均衡(Stream模块)配置说明
参考:利用nginx进行TCP负载均衡实战
直接上配置
user nginx;
worker_processes 2;
error_log /var/log/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
stream {
log_format proxy '$remote_addr [$time_local] '
'$protocol $status $bytes_sent $bytes_received '
'$session_time "$upstream_addr" '
'"$upstream_bytes_sent" "$upstream_bytes_received" "$upstream_connect_time"';
access_log /var/log/nginx/access.log proxy;
upstream stream_backend {
least_conn; ## 默认是轮询算法,这里修改为:least-connected :对于每个请求,nginx选择当前连接数最少的server来处理
server 192.168.230.25:10014 max_fails=2 fail_timeout=30s;
server 192.168.230.61:10014 max_fails=2 fail_timeout=30s;
server {
listen 443 ssl;
proxy_protocol on;
ssl_certificate keys/xx.pem;
ssl_certificate_key keys/xx.pem;
proxy_pass stream_backend;
proxy_timeout 3600s;
proxy_connect_timeout 10s;
}
}
这个配置比较好理解,项目上有需要也可以直接用。
stream 模块介绍
从1.9.0开始,NGINX增加了stream模块用来实现四层协议的转发、代理和负载均衡。
与著名的四层LB软件lvs相比,stream 模块(开源版)无论从功能还是性能上,都有一定的差距,实现也相对简单。从性能上来说,stream模块在应用层实现四层的转发,需要与两端建立起socket连接,然后两端的数据收发进行代理转发。因此,大量的数据从内核态到用户态再从用户态到内核态传递。这些数据copy加上系统调度的开销,使得它的性能与纯内核态转发的lvs相比,有一定差距。
在用户态做四层的proxy,从原理上讲主要有如下步骤:
创建一个socket 监听client连接。
Client连接到来以后,使用load balancer算法选取一个正确的upstream 服务器并且建立socket连接。
把从client收到的数据转发给upstream server,同时把upstream server收到的数据转发给client。
日志格式解释
$remote_addr:客户端的IP地址。
$time_local:请求的时间和日期。
$protocol:请求使用的协议(例如HTTP/1.1)。
$status:响应的状态码。
$bytes_sent:发送给客户端的字节数。
$bytes_received:从客户端接收的字节数。
$session_time:请求的处理时间。
$upstream_addr:后端服务器的IP地址和端口号。
$upstream_bytes_sent:发送给后端服务器的字节数。
$upstream_bytes_received:从后端服务器接收的字节数。
$upstream_connect_time:与后端服务器建立连接的时间。
Nginx TCP 负载均衡:stream 模块配置的更多相关文章
- Nginx 反向代理功能-实现Nginx tcp负载均衡
Nginx 反向代理功能-实现Nginx tcp负载均衡 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.
- Nginx专题(2):Nginx的负载均衡策略及其配置
本文介绍了Nginx的负载均衡策略,一致性hash分配原理,及常用的故障节点的摘除与恢复配置. 文章来源:宜信技术学院 & 宜信支付结算团队技术分享第一期-宜信支付结算八方数据团队高级技术经理 ...
- Centos7 nginx的负载均衡概念与配置
一.负载均衡概念 负载均衡(Server Load Balancer)是将访问流量根据转发策略分发到后端多台 ECS 的流量分发控制服务.负载均衡可以通过流量分发扩展应用系统对外的服务能力,通过消除单 ...
- nginx tcp负载均衡配置
1. nginx从1.9.0后引入模块ngx_stream_core_module,模块是没有编译的,需要用到编译需添加--with-stream配置参数 2. 在 nginx.conf 文件中, 与 ...
- nginx tcp负载均衡 (Module ngx_stream_upstream_module)
Example ConfigurationDirectives upstream server zone state hash least_conn ...
- 【精选】Nginx负载均衡学习笔记(一)实现HTTP负载均衡和TCP负载均衡(官方和OpenResty两种负载配置)
说明:很简单一个在HTTP模块中,而另外一个和HTTP 是并列的Stream模块(Nginx 1.9.0 支持) 一.两个模块的最简单配置如下 1.HTTP负载均衡: http { include m ...
- Nginx作为TCP负载均衡
参考文档:https://www.cnblogs.com/stimlee/p/6243055.html Nginx在1.9版本以后支持TCP负载均衡,模块默认是没有编译的,需要编译时添加—with-s ...
- Nginx之负载均衡配置(一)
前文我们聊了下nginx作为反向代理服务器,代理后端动态应用服务器的配置,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/12430543.html:今天我们来聊 ...
- 14.Nginx四层负载均衡
1.七层负载均衡: 根据url 调度不同的集群 url.cheng.com 10.0.0.5 10.0.0.7 /pass 10.0.0.8 /user 1.web01和web02配置 (只不过代码不 ...
- Nginx网络负载均衡,负载均衡,网络负载,网络均衡
本节就聊聊采用Nginx负载均衡之后碰到的问题: Session问题 文件上传下载 通常解决服务器负载问题,都会通过多服务器分载来解决.常见的解决方案有: 网站入口通过分站链接负载(天空软件站,华军软 ...
随机推荐
- .NET Web入门到高级路线(新版本)
.NET Web入门到高级路线 C# 基础语法 .NET Core 基础知识 ASP.NET Core基础知识概述 Blazor ASP.NET Core 官方文档 ORM FreeSql Entit ...
- 基于QtAV的简易播放器(开源)
这个开源代码,是我利用QtAV源码,提取其中一部分代码,进行整合到我自己项目中,做的一个小型播放器测试,至于怎么安装一些环境以及QtAV源码编译在我以前写的一篇博客中可以看到(Qt第三方库QtAV-- ...
- [人脸活体检测] 论文:Learn Convolutional Neural Network for Face Anti-Spoofing
[人脸活体检测] 论文:Learn Convolutional Neural Network for Face Anti-Spoofing 论文简介 这是最早期CNN用于活体检测的文章,在此之前都是手 ...
- percona-server-rocksdb-8.0.32 安装
MyRocks是关系型数据库Mysql 基于RocksDB 的存储引擎,一个可嵌入的.持久的键值存储.Percona MyRocks 是集于 Percona Server for MySQL的. Ro ...
- 2020-08-23:描述HTTPS和HTTP的区别。
福哥答案2020-08-23: 1.地址区别http:http://开头.https:https://开头. 2.默认端口区别http:端口80.https:端口443. 3.数据传输区别http:明 ...
- django安装依赖包报错No such file or directory: 'requirement.txt'和警告You are using pip version 22.0.4; however, version 23.0.1 is available.
ERROR: Could not open requirements file: [Errno 2] No such file or directory: 'requirement.txt'WARNI ...
- values() 字典形式显示查询结果
values() 字典形式显示查询结果 name,age为数据库的两个列 Student.objects.values('name','age')
- 使用ONE.Abp快速开发微服务,再也不用加班了
项目背景 公司采用项目制工作方式,因此在不同项目上可能存在多个团队开发独立的代码库,但通用的基础设施却是相同的,这可能导致每个项目都需要编写相同的代码,并重复造轮子.更严重的是,每个项目都有自己的用户 ...
- flutter 中使用 WebView加载H5页面异常net:ERR_CLEARTEXT_NOT_PERMITTED
最近有个flutter项目中根据搜索结果跳转到相应的H5页面发现老是报错,曾现在闲暇拉出来解决哈 先来看一个搜索功能的测试 已进入详情页面就提示错误,尴尬了. 只有去检测代码了撒 Search.dar ...
- cv学习总结(10.31-11.6)
这一周主要焦点在于实现反向传播和全连接两层神经网络的具体代码以及书写博客记录课程学习的心得体会,目前完成了反向传播的具体代码以及相应博客的书写,完成了assignment1中figure的SVM版提取 ...