0


一文读懂nginx之4层、7层代理

代理简介

  • Nginx采用C进行编写,因它的稳定性、丰富的功能集、简单的配置文件和低系统资源的消耗而闻名,其特点是占有内存少,并发能力强。
  • Nginx 代理有正向和反向代理,可以基于OSI七层模型中的第四层(传输层)和第七层(应用层)进行代理
  • Nginx 一般支持的是7层代理,支持4层代理一般使用 lvs 或者haprox
  • Nginx 从1.9.0 版本开始支持四层代理,但做四层代理时 源码编译需要添加 --with-stream模块, 这里的 --with-stream 是添加四层代理模块,可以用来创建其他业务集群

七层模型

OSI7层模型

四层模型

OSI四层模型

正向代理

  • 代理客户端, 正向代理的过程隐藏了真实的请求客户端,服务器不知道真实的客户端是谁,客户端的服务都被代理服务器代替请求, 例如VPN就是典型的正向代理
  • 客户端 <-------> 代理 -----------> 服务端正向代理

反向代理

  • 代理服务端, 反向代理的过程隐藏了真实的服务器,客户端不知道真正提供服务的是谁,客户端请求的服务都被代理服务器接收
  • 客户端 -------> 代理 <-----------> 服务端反向代理

七层代理

  • OSI第7层代理是写在http模块中的,
  • OSI第7层(应用层)协议, 主要支持的协议有http,htps,smtp,ftp,dns,pop3,dhcp等协议
  • OSI第7层(应用层)代理, 通常是http代理, 基于url和ip以及cookie和请求头针对web服务进行分流, 通过虚拟的 URL 或主机名接收请求,然后再分配到真实的服务器, 是基于URL等应用层信息的负载均衡
  • OSI第7层(应用层)代理, 可以是正向代理,也可以是反向代理

四层代理

  • OSI第4层(传输层)代理, 是写在stream模块中,与http模块并列,且做代理时源码编译需要添加 --with-stream 模块进行编译
  • OSI第4层(传输层)协议, 是基于TCP/UDP协议
  • OSI第4层(传输层)代理, 是基于ip和端口的转发, –with-stream 是添加四层代理模块,可以用来创建其他业务集群,比如ssh,mysql, 所谓四层负载均衡,也就是主要通过报文中的目标地址和端口,再加上负载均衡 设备设置的服务器选择方式,决定最终选择的内部服务器,它一般走的是tcp,udp协议
  • OSI第4层(传输层)代理, 一般都是反向代理

正向代理示例

server {
    resolver 8.8.8.8;
    location / {
        proxy_pass http://$host$request_uri;}}

反向代理示例

server {
    location / {
        proxy_pass http://localhost:8000;}}

服务器集群配置信息:

服务器IP                    安装服务
192.168.1.100           nginx, sshd
192.168.1.101            nginx, sshd

4层反向代理示例

  • 登录192.168.1.100服务器 vim /etc/nginx/conf.d/tcp_4_proxy.conf
stream {
    upstream backend {
        server 192.168.1.100:22;
        server 192.168.1.101:22;}
    server {
        listen 12345;# 监听端口
        proxy_pass backend;# 调用集群}}

7层反向代理示例

  • 登录192.168.1.100服务器 vim /etc/nginx/conf.d/http_7_proxy.conf
upstream web {
    server 192.168.1.100:80;
    server 192.168.1.101:80;}
server {
    listen 80;
    location / {
        proxy_pass http://web;# 要代理的后端服务器地址(可以使服务器集群)
        root html;
        index index.html index.htm;}}

7层正向代理示例

  • 登录192.168.1.100服务器 vim /etc/nginx/conf.d/http_7_proxy.conf
http {
    server {
        listen 3128;# 正向代理服务的端口
 
        location / {
            proxy_pass http://192.168.1.101:22;# 要代理的后端服务器地址(单台服务器)
            proxy_set_header Host $http_host;# 将原始请求的Host头发送到后端服务
            proxy_set_header X-Real-IP $remote_addr;# 将客户端的真实IP传递给后端服务
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;# 将代理链中的所有IP记录下来}}}

upstream模块参数

参数                说明
server            负载后面的RS配置,可以是ip或者域名
weight            请求服务器的权重。默认值为1,越大表示接受的请求比例越大
max_fails        nginx 尝试连接后端主机失败的次数,需要配合proxy_net_upstream,fastcgi_next_upstream和memcached_next_upstream这三个参数来使用
fail_timeout    在max_fails定义的失败次数后,距离下次检查的时间间隔,默认10s
backup            热备配置,标志这台服务器作为备份服务器,若主服务器全部宕机了,就会向它转发请求
down            表示这个服务器永不可用,可配合ip_hash使用

集群常用软硬件

  • 常用开源集群软件有:lvs,keepalived,haproxy,nginx,apache,heartbeat
  • 常用商业集群硬件有:F5, Netscaler,Radware,A10等

负载均衡算法

rr轮询(默认)
  • 默认调度算法,每个请求按时间顺序逐一分配到不同的后端服务器,宕机的服务器会自动从节点服务器池中剔除。
upstream server_pool {
    server 192.168.1.100;
    server 192.168.1.101;}
wrr加权轮询(weight)
  • 在rr轮询算法的基础上加上权重,权重和用户访问成正比,权重值越大,被转发的请求也就越多, 加权轮询应用于服务器性能不等的集群中,使资源分配更加合理化
upstream server_pool {
    server 192.168.1.100 weight=5;
    server 192.168.1.101 weight=10;}
ip_hash(会话保持)
  • 每个请求按访问IP的hash结果分配,同一个IP客户端固定访问一个后端服务器。可以保证来自同一ip的请求被打到固定的机器上,可以解决session问题
upstream server_pool {
    ip_hash;
    server 192.168.1.100;
    server 192.168.1.101;}
fair(动态调度算法)
  • 此种算法根据后端服务器的响应时间来分配请求,响应时间短的优先分配。 Nginx 本身是 不支持 fair 的,如果需要使用这种调度算法,必须下载Nginx的 upstream_fair 模块
upstream server_pool {
    server 192.168.1.100;
    server 192.168.1.101;
    fair;}
url_hash算法(web缓存节点)
  • 根据访问URL的hash结果来分配请求,让每个URL定向到同一个后端服务器, 同样,Nginx本身是不支持url_hash,如果需要使用这种调度算法,必须安装Nginx的hash模块软件包。
upstream server_pool {
    server 192.168.1.100;# 指定后端服务器的地址和端口
    server 192.168.1.101;hash$request_uri;# 使用哈希方法来分配请求并使用请求的URI作为哈希的键
    hash_method crc32;# 使用CRC32算法来计算哈希值}
标签: nginx web 负载均衡

本文转载自: https://blog.csdn.net/Mr_Sunqq/article/details/141712367
版权归原作者 庆 、 所有, 如有侵权,请联系我们删除。

“一文读懂nginx之4层、7层代理”的评论:

还没有评论