Nginx四层代理和七层代理

2021年5月20日17:17:33 发表评论
摘要

【心语】选择了安逸舒适,就不必羡慕别人的精彩;选择了惊涛骇浪,就无须向往岁月静好。不同的选择给予你不同的生活路径。没有孰对孰错,只要认定你内心真正想要的,并为之持续努力,每个人都会是自己的人生赢家!

一、Nginx负载均衡中四层和7层的代理对比

1、什么是四层代理和七层代理

这里的层是指OSI层网络模型,OSI模型是从上往下,越底层越接近硬件,越往上越接近软件,这七层模型分别是物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。

。四层是指传输层的tcp/udp

。七层是指应用层,通常是http

2、代理原理

四层用的是NAT技术,大概意思是‘网络地址转换’,请求进来的时候,Nginx修改数据包里面的目标和源IP和端口,然后把数据包发向目标服务器,服务器处理完成后,Nginx再做一次修改,返回给请求的客户端。

七层代理:需要读取并解析http请求内容,然后根据具体内容(url参数,cookie, 请求头)然后转发到相应的服务器,转发的过程是:建立和目标机器的连接,然后转发请求,收到响应数据在转发给请求客户端

3、性能

理论上4层比7层快,因为7层代理需要解析数据包的具体内容,需要消耗额外的CPU,但nginx具体强大的网络并发处理能力,对于一些慢连接,nginx可以先将网络请求数据缓冲完了一次性转发给上游server,这样对于上游网络并发处理能力弱的服务器(比如tomcat),这样对tomcat来说就是慢连接变成快连接(nginx到tomcat基本上都是可靠内网),从而节省网络数据缓冲时间,提高并发性能

二、四层代理代理配置示例
。说明:如果配置文件需要单独放的话,配置配件需要在server外面引用

Nginx四层代理和七层代理

四层:和http段平级
这里我们使用负载均衡upstaream 模块代理一个页面配置

stream{
server {
listen 8080;
proxy_pass apps;
proxy_connect_timeout 10s;
}
upstream apps{
server 192.168.44.163:80;
}
}

说明:首先我们要确保192.168.44.163:80 能够正常访问,然后stream模块必须写在http同一级。如图

Nginx四层代理和七层代理

。通过上面的配置地址 http://192.168.44.163:8080就可以访问了如图

Nginx四层代理和七层代理

  • 第二种场景:假设我们某台数据库只能内网访问登录,也可以通过一台有外网的地址做nginx 4层代理配置转发,前台是有外网的服务器必须跟这台数据库服务器内网互通
#nginx layer4
stream{
server {
listen 6379;
proxy_pass 172.18.78.218:6379;
proxy_connect_timeout 10s;
}
}

。如图配置的是redis的一个访问,如果是Mysql 也可以使用同样的方式

Nginx四层代理和七层代理

说明:测试通过这台nginx4层代理的服务器的公网地址,连接到内网的redis 成功

  • 七层代理一般如图

。说明必须在http段里面设置

server {
listen 80;
server_name localhost;
charset utf-8;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#静态文件路径
location / {
root html/;
index index.html index.htm help004.html;
}
}

Nginx四层代理和七层代理

访问浏览器输入:http://192.168.44.163/

Nginx四层代理和七层代理

  • 微信公众号
  • 这是我的微信公众号扫一扫
  • weinxin
  • 我的QQ技术群
  • 我的QQ技术群扫一扫
  • weinxin
admin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: