前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >nginx反向代理和负载均衡算法介绍

nginx反向代理和负载均衡算法介绍

作者头像
地球流浪猫
发布2019-12-20 15:51:36
6800
发布2019-12-20 15:51:36
举报

nginx

反向代理

正向代理是代理客户端,反向代理是代理服务器

nginx 已经模块化,代理功能是代理模块提供的

配置文件详解

...              #全局块

events {         #events块
   ...
}

http      #http块
{
    ...   #http全局块
	
    upstream{ #upstream块

    } 

    server        #server块
    { 
        ...       #server全局块
        location [PATTERN]   #location块
        {
            ...
        }
        location [PATTERN] 
        {
            ...
        }
    }
    server
    {
      ...
    }
    ...     #http全局块
}

1 全局块:配置影响nginx全局的指令。一般有运行nginx服务器的用户组,nginx进程pid存放路径,日志存放路径,配置文件引入,允许生成worker process数等。

2 events块:配置影响nginx服务器或与用户的网络连接。有每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网路连接,开启多个网络连接序列化等。

3 http块:可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等。

4 upstream块 配置负载均衡算法

5 server块:配置虚拟主机的相关参数,一个http中可以有多个server。

6 location块:配置请求的路由,以及各种页面的处理情况。

nginx 内置变量

$args                      请求中的参数;
$binary_remote_addr        远程地址的二进制表示
$body_bytes_sent           已发送的消息体字节数
$content_length            HTTP请求信息里的"Content-Length"
$content_type              请求信息里的"Content-Type"
$document_root             针对当前请求的根路径设置值
$document_uri              与$uri相同
$host                      请求信息中的"Host",如果请求中没有Host行,则等于设置的服务器名;    
$http_cookie               cookie 信息 
$http_referer              来源地址
$http_user_agent           客户端代理信息
$http_via                  最后一个访问服务器的Ip地址
$http_x_forwarded_for      相当于网络访问路径。    
$limit_rate                对连接速率的限制          
$remote_addr               客户端地址
$remote_port               客户端端口号
$remote_user               客户端用户名,认证用
$request                   用户请求信息
$request_body              用户请求主体
$request_body_file         发往后端的本地文件名称      
$request_filename          当前请求的文件路径名
$request_method            请求的方法,比如"GET"、"POST"等
$request_uri               请求的URI,带参数   
$server_addr               服务器地址,如果没有用listen指明服务器地址,使用这个变量将发起一次系统调用以取得地址(造成资源浪费)
$server_name               请求到达的服务器名
$server_port               请求到达的服务器端口号
$server_protocol           请求的协议版本,"HTTP/1.0"或"HTTP/1.1"
$uri                       请求的URI,可能和最初的值有不同,比如经过重定向之类的

最简单的第一步 反向代理百度首页

代理百度首页
 server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
			proxy_pass https://www.baidu.com;
        }

        #error_page  404              /404.html;
        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

访问本地地址:127.0.0.1 或者 localhost就相当于访问百度首页了

基于反向代理 负载均衡

需求:有2个后台应用服务器,分别标为A,B服务器,A的服务器性能是B的2倍,现在有300个访问请求,需要将200个访问请求引流到A服务器,100个请求引流到B服务器怎么办?

upstream backend {
    # A服务器 权重为2
    server 127.0.0.1:9001 weight=2;
    # B服务器 权重为1
    server 127.0.0.1:9002 weight=1;
    }
    server {
        listen       80;
        server_name  localhost;
        location / {
            #代理至backend 块级指令代理
			proxy_pass http://backend;
        }
    }

使用 NGINX 的 HTTP 模块,将请求分发到有 upstream 块级指令代理的 HTTP 服务器集群,实现负载均衡。其中weight表示权重,可以通过weight来控制服务器的压力。 其中upstream 定义一个目标服务器连接池,它可以是 UNIX 套接字、IP 地址、DNS 记录 或它们的混合使用配置。

负载均衡算法

  • 轮询负载均衡算法
  • 最少连接数负载均衡算法
  • 最短响应时间负载均衡算法
  • 基于Hash负载均衡算法
  • IP_Hash负载均衡算法

轮询负载均衡算法

轮询负载均衡算法是nginx 默认负载均衡算法,在upstream模块设置权重,权重越大,分发的请求到该服务器的上的数量越大。
没有指明算法时,nginx使用该算法。

最少连接数负载均衡算法

upstream backend {
    server 127.0.0.1:9001 ;
    server 127.0.0.1:9002 ;
    least_conn;
    }
在upstream 添加`least_conn`字段,即可使用最少连接数负载均衡算法。
该算法根据打开连接数实现负载均衡,nginx根据连接数判读服务器当前性能好坏,将请求分配给性能最好(连接最少)的服务器

最短响应时间负载均衡算法(商业)

upstream backend {
    server 127.0.0.1:9001 ;
    server 127.0.0.1:9002 ;
    least_time;
}
在upstream 添加`least_time`字段,即可使用最少连接数负载均衡算法。该算法只在nginx puls中有,即在nginx的商业版本中有。
nginx会将请求分发给平均响应时间更短的应用服务器。

基于Hash负载均衡算法

upstream backend {
    server 127.0.0.1:9001 ;
    server 127.0.0.1:9002 ;
    hash $request_uri ;
}
在upstream 添加`hash $var`字段,其中var表示内置变量。如上代码则表示根据request_uri(http 路径参数)进行Hash。如果写`hash $request_method;`
则可以根据请求方法不同,分配不同的服务器。
hash后面跟的变量官方给的解释是:The administrator defines a hash with the given text, variables of the request or runtime, or both
意思是例如文本,变量,或者运行环境,或者这些的组合。
当有服务器被添加或者删除的时候会重新添加hash值进行分发,这个算法就是使用的是一致性hash算法。

IP_Hash负载均衡算法

upstream backend {
    server 127.0.0.1:9001 ;
    server 127.0.0.1:9002 ;
    ip_hash ;
}
这个算法基于Hash负载均衡算法对访问者的ip求hash,从而实现负载均衡。这个可以保证没有办法存储session 或者session丢失的请求,只要ip不发生改变,
并且服务器可用的情况下,请求永远都负载同一台服务器上。
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • nginx
    • 反向代理
      • 配置文件详解
    • nginx 内置变量
      • 最简单的第一步 反向代理百度首页
        • 基于反向代理 负载均衡
          • 负载均衡算法
            • 轮询负载均衡算法
            • 最少连接数负载均衡算法
            • 最短响应时间负载均衡算法(商业)
            • 基于Hash负载均衡算法
            • IP_Hash负载均衡算法
        相关产品与服务
        负载均衡
        负载均衡(Cloud Load Balancer,CLB)提供安全快捷的流量分发服务,访问流量经由 CLB 可以自动分配到云中的多台后端服务器上,扩展系统的服务能力并消除单点故障。负载均衡支持亿级连接和千万级并发,可轻松应对大流量访问,满足业务需求。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档