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

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不发生改变,
并且服务器可用的情况下,请求永远都负载同一台服务器上。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值