Nginx配置文件解读和4种常用实现负载均衡的方式

     

目录

正向代理

反向代理

总结:

Nginx配置文件

nginx 的组成部分

第一部分:全局块

第二部分:events块

第三部分:http块

http全局块

扫描二维码关注公众号,回复: 16216161 查看本文章

server 块

Nginx常用的实现负载均衡的4种方式

轮询(Round Robin):

IP哈希(IP Hash):

加权轮询(Weighted Round Robin):

最少连接(Least Connections):


        前提:首先先了解一下正向代理和反向代理的理论知识,再直接解读nginx配置文件和实现负载均衡的4种方式。

Nginx是一个强大的开源Web服务器和反向代理服务器,它支持正向代理和反向代理功能。下面是对两者的简要解释:

正向代理

        正向代理是在客户端和目标服务器之间充当中间人的代理服务器。当客户端请求访问目标服务器时,请求先发送到正向代理服务器,然后由代理服务器转发请求给目标服务器,并将目标服务器的响应返回给客户端。正向代理隐藏了客户端的真实IP地址,使得目标服务器无法直接识别和追踪客户端。

正向代理的主要用途包括:

  • 访问被限制的资源:当某些资源受到网络限制或访问限制时,可以使用正向代理绕过这些限制来获取资源。
  • 提高访问速度:代理服务器可以缓存经常请求的资源,从而提高客户端访问资源的速度。
  • 突破防火墙:正向代理可以帮助绕过企业或国家防火墙的限制,访问被封锁的网站或资源。

反向代理

        反向代理是在服务器端和客户端之间充当中间人的代理服务器。当客户端发送请求访问反向代理服务器时,代理服务器会根据一定的规则将请求转发给后端的多个服务器中的一台,然后将后端服务器的响应返回给客户端。反向代理隐藏了真实的服务端,对于客户端而言,它们并不知道具体访问的是哪一台后端服务器。

反向代理的主要用途包括:

  • 负载均衡:反向代理可以根据一定的算法将请求均匀地分发给后端的多台服务器,从而实现负载均衡,提高系统的并发处理能力和稳定性。
  • 缓存静态资源:反向代理可以缓存经常请求的静态资源,减少后端服务器的负载,提高网站的访问速度。
  • 安全性和可靠性:反向代理可以作为防火墙和安全设备,提供安全认证、访问控制、DDoS攻击防护等功能。

总结:

  • 正向代理和反向代理都是利用代理服务器作为中间人来转发请求和响应。
  • 正向代理是客户端通过代理服务器发送请求,代理服务器帮助客户端发送请求到互联网上的目标服务器隐藏客户端的真实IP地址(目标服务器并不知道是那个真实的客户端访问的)。
  • 反向代理是客户端通过代理服务器发送请求,代理服务器将请求转发到后端的多个服务器中的一个反向代理隐藏真实的服务端(客户端并不知道那个后端服务器响应的结果)
  • 两者的区别在于请求的流向和代理服务器与目标服务器的关系,正向代理中代理服务器与客户端处于同一侧,反向代理中代理服务器与目标服务器处于同一侧。

Nginx配置文件

nginx 的组成部分

        配置文件中有很多#, 开头的表示注释内容,我们去掉所有以 # 开头的段落,精简之后的 内容如下:

worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    server {
        listen       8080;
        server_name  localhost;

        location / {
            root   html;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

nginx 配置文件有三部分组成


第一部分:全局块

比如上面第一行配置的:

  worker_processes  1;

        这是 Nginx 服务器并发处理服务的关键配置,worker_processes 值越大,可以支持的并发处理量也越多,但是 会受到硬件、软件等设备的制约。

第二部分:events块

比如上面的配置:

events {
    worker_connections  1024;
}

        events 块涉及的指令 主要影响 Nginx 服务器与用户的网络连接,常用的设置包括是否开启对多 work process 下的网络连接进行序列化,是否允许同时接收多个网络连接,选取哪种事件驱动模型来处理连接请求,每个 word process 可以同时支持的最大网络连接数等。
上述例子就表示每个 work process 支持的最大连接数为 1024.
这部分的配置对 Nginx 的性能影响较大,在实际中应该灵活配置。

第三部分:http块
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    server {
        listen       8080;
        server_name  localhost;

        location / {
            root   html;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

需要注意的是:http 块也可以包括 http全局块、server 块。

http全局块

        http全局块配置的指令包括文件引入、MIME-TYPE 定义、日志自定义、连接超时时间、单链接请求数上限等。

server 块

         这块和虚拟主机有密切关系,虚拟主机从用户角度看,和一台独立的硬件主机是完全一样的,该技术的产生是为了 节省互联网服务器硬件成本。
每个 http 块可以包括多个 server 块,而每个 server 块就相当于一个虚拟主机
而每个 server 块也分为全局 server 块,以及可以同时包含多个 locaton 块。

Nginx常用的实现负载均衡的4种方式

Nginx提供了多种方式实现负载均衡,以下是其中几种常用的方式:

轮询(Round Robin):

        这是默认的负载均衡算法,Nginx按照请求的顺序依次将请求分配给后端的服务器。每个服务器按照其权重来处理请求,然后按顺序循环分配。这种算法简单且平均地将负载分配给后端服务器,适用于后端服务器配置相同、处理能力相当的场景。

http {
    upstream backend {
        server 192.168.1.101:8080;
        server 192.168.1.102:8080;
        server 192.168.1.103:8080;
    }

    server {
        listen 80;
        
        location / {
            proxy_pass http://backend;
        }
    }
}
IP哈希(IP Hash):

        Nginx根据客户端的IP地址进行哈希运算,并根据计算结果将请求分配给固定的后端服务器。这种算法保证了相同的客户端IP每次请求都会被分配到相同的服务器,适用于需要保持会话状态的应用。

http {
    upstream backend {
        ip_hash;
        server 192.168.1.101:8080;
        server 192.168.1.102:8080;
        server 192.168.1.103:8080;
    }

    server {
        listen 80;
        
        location / {
            proxy_pass http://backend;
        }
    }
}
加权轮询(Weighted Round Robin):

        Nginx根据每个后端服务器的配置权重将请求分配给服务器。权重越高的服务器,处理的请求就越多。这种方式适用于后端服务器之间配置不同、处理能力不同的情况下。

http {
    upstream backend {
        server 192.168.1.101:8080 weight=3;
        server 192.168.1.102:8080 weight=2;
        server 192.168.1.103:8080 weight=1;
    }

    server {
        listen 80;
        
        location / {
            proxy_pass http://backend;
        }
    }
}
 最少连接(Least Connections):

        Nginx会统计每个后端服务器当前的活动连接数,并将请求分配给活动连接数最少的服务器,以实现负载均衡。这种算法适用于后端服务器配置和处理能力不同、连接持续时间不均衡的场景。

http {
    upstream backend {
        least_conn;
        server 192.168.1.101:8080;
        server 192.168.1.102:8080;
        server 192.168.1.103:8080;
    }

    server {
        listen 80;
        
        location / {
            proxy_pass http://backend;
        }
    }
}

猜你喜欢

转载自blog.csdn.net/m0_64210833/article/details/131954254