反向代理的种类

1. LVS的方案
2. DNS轮询的方案
3. Nginx的4层代理
4. Nginx的7层代理
5. 网络NAT的处理

Nginx的反向代理-四层`

编译时增加 --with-stream 就可以.
然后可以使用 stream 四层反向代理
可以代理 mysql redis 以及一些其他的内容配置.
但是四层反向代理缺少很多语法, 比如七层反向代理来的适用面广
一个四层反向代理的标准处理为: stream {
upstream backend {
# 指定负载均衡算法,这里是一致性hash算法,以$remote_addr作为hash的键.
hash $remote_addr consistent; server backend1.example.com:12345 weight=5;
server 127.0.0.1:12345 max_fails=3 fail_timeout=30s;
server unix:/tmp/backend3;
}
server {
# 指定监听的端口,tcp/udp
listen 12345;
proxy_connect_timeout 1s;
proxy_timeout 3s;
# 代理至backend服务器组
proxy_pass backend;
}

关于四层反向代理的几个负载均衡算法

round-robin:  默认情况下,NGINX使用循环算法对流量进行负载均衡,将其顺序​​定向到配置的上游组中的服务器。
因为它是默认方法,没有round-robin指令; 只需upstream在顶层stream上下文中创建一个
配置块并添加上server一步中描述的指令。
least_conn : NGINX选择当前活动连接数较少的服务器。
least_time : NGINX选择平均延迟最小,活动连接数最少的服务器。
最低平均延迟是基于以下参数中的哪一个包括在least_time指令上计算的:
connect - 连接到上游服务器的时间
first_byte - 接收数据的第一个字节的时间
last_byte - 从服务器接收完整响应的时间
hash : NGINX基于用户定义的密钥选择服务器,例如源IP地址
所述散列负载平衡方法还用于配置会话持久性。
于散列函数基于客户端IP地址,来自给定客户端的连接始终传递到同一服务器,
除非服务器关闭或以其他方式不可用。指定一个可选consistent参数以应用ketama一致性散列方法:

四层的负载均衡的范例

upstream backend {
laset_conn ;
}
upstream backend {
least_time first_byte;
}
upstream stream_backend {
hash $remote_addr consistent;
}
# 能够实现客户端绑定到具体的服务器端.

http负载均衡

除了四层反向代理, 用的最多的是 七层反向代理. 

http {
upstream backend {
server backend1.example.com weight=5;
server backend2.example.com;
server 192.0.0.1 backup;
} server {
location / {
proxy_pass http://backend;
}
}
}

区别

四层反向代理是在 stream 的配置节里面
七层反向代理是在 http 的配置节里面 四层反向代理 可以指定 udp和tcp两种协议.
七层反向代理 可以指定 https等.

http 的负载均衡算法

与四层负载均衡对应, 七层负载均衡也有很多算法.
least_conn;
ip_hash;
hash $request_uri consistent;
least_time header; (header,last_byte) 可以增加 weight=xxx 的比重,如果服务器配置不同,可以进行一定程度的区分.

关于sitcky以及ip_hash

ip_hash 是 nginx 开源版就支持的负载均衡粘滞模式.
最大的区别是, 他是基于内核里面的ip地址进行计算来的.
具体算法是:
注意代码的位置为:src/http/modules/ngx_http_upstream_ip_hash_module.c
注意修改 : addrlen 的参数 从 3 修改为 4 就可以进行全部ipv4段的负载均衡.
但是需要注意如果是VPN 过来的IP电话, 或者是如下hash算法的处理的结果一致
依旧会路有到相同的后端服务器上面. for ( ;; ) { for (i = 0; i < (ngx_uint_t) iphp->addrlen; i++) {
hash = (hash * 113 + iphp->addr[i]) % 6271;
}

关于sticky

最开始是一个组件, 需要编译时显示指定.
怀疑最近nginx plus 企业版将其纳入了使用范围.
开源版本的支持边的越来越有线.
1.22.x的版本还是支持的, 但是1.23.0就不在支持比较奇怪
具体的写法有如下几种:
注意如果比较简单 直接写 sticky;也可以. sticky cookie srv_id expires=1h domain=.example.com path=/; sticky route $route_cookie $route_uri; sticky learn
create=$upstream_cookie_examplecookie
lookup=$cookie_examplecookie
zone=client_sessions:1m
timeout=1h
sync;

关于负载均衡的性能

反向代理, 其实是 一方面做为服务端提供服务, 一方面作为客户端连接后端服务的过程. 

worker进程core绑定
对应网卡的中断绑定
作为服务端提供长连接服务
作为客户端提供对后端服务的长连接服务.
需要注意作为客户端时 必须保证 客户端的超时时间, 以及超时客户端的数量小于后端服务器.
但是也可以这样计算.
如果我方向代理 4个服务器, 设置长连接40个, 超时时间 60s 那么建议每个后端服务
至少也设置为40个以上的长连接, 60秒以上的超时时间.
避免如果负载不均衡是不会出现严重的问题.

长连接参数配置

http {
keepalive_timeout 6000; # 作为服务端的超时时间
keepalive_requests 10000; # 长连接的个数. 注意不能太大.
upstream myapp{
ip_hash;
keepalive 300; # 这是是联系反向代理服务器的设置.
server 127.0.0.1:5200 ;
server 127.0.0.1:5201 ;
}
server {
listen 8080 default_server;
server_name "";
location / {
proxy_http_version 1.1; # 注意这个是必须的参数
# proxy_set_header Connection "";
# 注意 我加上这个参数. 登录就失败了, 建议不使用这个参数.
}
}

注意内核参数的设置

1. TCP相关内核的参数:
tw,port_range,somaxconn,tw_reuse
等核心参数.
2. TCP拥塞算法的选择. 是否启用tcp的聚合等处理.
3. 网卡软中断的绑核. 建议与nginx在同一个sockets,但是不在同一个core上面来提高吞吐量.
4. tcp 内存设置参数, 可以适当调大, 便于进行处理.
5. 如果延时敏感性, 可以关闭部分网卡的GSO,TSO 等参数,提高响应速度.不过会浪费一点带宽.

Nginx反向代理总结的更多相关文章

  1. 使用python自动生成docker nginx反向代理配置

    由于在测试环境上用docker部署了多个应用,而且他们的端口有的相同,有的又不相同,数量也比较多,在使用jenkins发版本的时候,不好配置,于是想要写一个脚本,能在docker 容器创建.停止的时候 ...

  2. Nginx反向代理,负载均衡,redis session共享,keepalived高可用

    相关知识自行搜索,直接上干货... 使用的资源: nginx主服务器一台,nginx备服务器一台,使用keepalived进行宕机切换. tomcat服务器两台,由nginx进行反向代理和负载均衡,此 ...

  3. Nginx反向代理部署指南

    一.反向代理 我们都知道,80端口是web服务的默认端口,其他主机访问web服务器也是默认和80端口进行web交互,而一台服务器也只有一个80端口,这是约定俗成的标准. 我们来看下面两个场景: 1.服 ...

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

    转载:http://freeloda.blog.51cto.com/2033581/1288553 大纲 一.前言 二.环境准备 三.安装与配置Nginx 四.Nginx之反向代理 五.Nginx之负 ...

  5. Nginx反向代理和负载均衡

    一.Nginx反向代理设置 从80端口转向其他端口反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的 ...

  6. nginx 反向代理

    nginx 反向代理 vim nginx.conf http { ..... upstream "tomcatweb" { server 172.30.13.199:8080; s ...

  7. 关于nginx反向代理后获取不到客户端的真实ip地址问题

    前段时间在我的网站上用nginx做了一下反向代理,最近发现不能获取客户端ip了,都是拿到的127.0.0.1的本地ip... 通过查资料后,再去看了看我的配置文件,结果发现我没有如下配置: nginx ...

  8. Nginx反向代理配置可跨域

    由于业务需要,同一项目中的前端代码放在静态环境中,而后端代码放在tomcat中,但此时问题却出现了:前端使用ajax请求后端获取数据时出现如下报错 XMLHttpRequest cannot load ...

  9. Nginx反向代理搭建配置

    1.反向代理方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将服务器上得到的结果返回给internet 上请求连接的客户端,此时代理服务器对外就表现为一个 ...

  10. nginx反向代理docker registry报”blob upload unknown"解决办法

    问题症状:keepalived+nginx反向代理后端docker registry群集时,使用docker客户机向registry push镜像时出现 "blob upload unkno ...

随机推荐

  1. 构建万物互联,华为云IoT+鸿蒙重燃物体感知

    摘要:鸿蒙的出现,让硬件.软件行业面临着变革与重构的洪流,但激流勇进中,也潜藏着巨大机遇.物联网设备与鸿蒙结合成为必然趋势,本文将解读华为云IoT+鸿蒙如何强强联合,为物联网行业提供新的思路和方法. ...

  2. 五一高铁票难抢?用RPA机器人试试!

    随着信息数字化的高速发展,RPA在各行业中得到广泛应用,热度大增.这匹"技术黑马"已然成为构建业务流程自动化的重要引擎之一,助力企业组织向"智能自动化转型. 什么是RPA ...

  3. Angular:都2021年了,你为啥还没用Angular

    摘要:数据绑定是将应用程序UI或用户界面绑定到模型的机制.使用数据绑定,用户将能够使用浏览器来操纵网站上存在的元素. Web开发需要模型和视图之间的数据同步.这些模型基本上包含数据值,而视图则处理用户 ...

  4. 带你掌握java反序列化漏洞及其检测

    摘要:在本文中将先介绍java反序列化漏洞的原理,然后在此基础上介绍安全工具如何检测.扫描此类漏洞. 本文分享自华为云社区<java反序列化漏洞及其检测>,作者: alpha1e0. 1 ...

  5. 实践解析可视化开发平台FlinkSever优势

    摘要:华为Flink可视化开发平台FlinkServer作为自研服务,能够提供比原生flinksql接口更强的企业级特性,比如任务的集中管理,可视化开发,多数据源配置等. 本文分享自华为云社区< ...

  6. 让 K8s 更简单!8款你不得不知的 AI 工具-Part 1

    介绍 最近,AI 引起了广泛关注,而 Kubernetes 驱动的 DevOps 也不例外.软件工程师是自动化的忠实拥护者,因此针对 Kubernetes 操作员的 AI 驱动工具自然也开始涌现. 这 ...

  7. 治理效率提升77%!揭秘基于DataLeap实时健康分的最佳实践

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 背景 某企业实时数仓团队通过数据收集.整合.计算和存储构建实时数据仓库,为企业提供快速.准确.可靠的实时数据分析和 ...

  8. Axure App 垂直滚动

    拖两个动态面版 最外层[动态面板]用来定义显示区域,高度:692 (根据实际来) 里面的[动态面板],用来放内容,高度根据实际情况来,示例中是:1920 如下图所示 里面的[动态面板]添加垂直滚动 外 ...

  9. i 的二次幂求和

    学习 自为风月马前卒 大佬的数学笔记 \(i^2\) 求和 查阅资料我们很容易就发现 \(\sum_{i = 1}^ni^2 = \frac{n(n + 1)(2n + 1)}{6}\) 但具体怎么求 ...

  10. 加密原理详解:对称式加密VS非对称式加密

    一.前言 在了解加密原理前,我们来看看这样一个故事. 小红和小明是情侣,一天,小红给小明发短信说:"亲爱的,我银行卡上没有钱了,你给我转1万块吧."有过上当受骗经历的人都知道这有可 ...