Nginx负载均衡与反向代理

发布于:2022-12-21 ⋅ 阅读:(448) ⋅ 点赞:(0)

一、正向代理和反向代理

1.1 正向代理

先搭建一个属于自己的代理服务器
1、用户发送请求到自己的代理服务器
2、自己的代理服务器发送请求到服务器
3、服务器将数据返回到自己的代理服务器
4、自己的代理服务器再将数据返回给用户
在这里插入图片描述

  • 作用:正向代理隐藏了用户,用户的请求被代理服务器接收代替,到了服务器,服务器并不知道用户是谁。
  • 用途:当你用浏览器访问国外的网站时,被block(拒绝)时,你可以在国外搭建一个代理服务器,这样就可以正常访问了

1.2 反向代理

1、用户发送请求到服务器(访问的其实是反向代理服务器,但用户不知道)
2、反向代理服务器发送请求到真正的服务器
3、真正的服务器将数据返回给反向代理服务器
4、反向代理服务器再将数据返回给用户
在这里插入图片描述

  • 作用:用户请求过多,服务器会有一个处理的极限。所以使用反向代理服务器接受请求,再用均衡负载将请求分布给多个真实的服务器。既能提高效率还有一定的安全性。
  • 用途:如果不采用代理,用户的IP、端口号直接暴露在Internet(尽管地址转换NAT),外部主机依然可以根据IP、端口号来开采主机安全漏洞,所以在企业网,一般都是采用代理服务器访问互联网。

正向代理与反向代理最简单的区别:
正向代理隐藏的是用户,反向代理隐藏的是服务器

二、什么是负载均衡

当用户访问量越大时,服务器压力就越大,超过承受能力范围时,服务器就会崩溃,为了避免服务器崩溃,让用户有更好的体验,可以通过负载均衡的方式分担服务器的压力。
用户首先访问代理服务器,通过代理服务器的配置规则访问具体的集群服务器中的一个,来达到分担服务器的压力,避免了服务器崩溃的情况。

负载均衡是通过反向代理的原理来实现的

三、负载均衡的几种常用方式

3.1 轮询方式(Nginx默认的)

3.1.1 普通轮询

每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除

配置nginx.conf文件

http {
  
    #负载均衡配置
    upstream xiaohong{
	#服务资源
	#配置权重:server 127.0.0.1:8080 weight=1;
	server 127.0.0.1:8080;
	server 127.0.0.1:8082;
    }

    server {
        listen       80;
        server_name  localhost;

	#代理
    location / {
        root   html;
        index  index.html index.htm;
 		proxy_pass http://xiaohong;
    }
}

3.1.2 权重轮询

指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的 情况。

 upstream xiaohong{
	#服务资源
	#配置权重:server 127.0.0.1:8080 weight=1;
	server 127.0.0.1:8080 weight=1;
	server 127.0.0.1:8082 weight=2;
    }

权重越高,在被访问的概率越大,如上例,分别是1/3,2/3。

3.2 ip_hash方式

上述方式存在一个问题就是说,在负载均衡系统中,假如用户在某台服务器上登录了,那么该用户第二次请求的时候,因为我们是负载均衡系统,每次请求都会重新定位到服务器集群中的某一个,那么已经登录某一个服务器的用户再重新定位到另一个服务器,其登录信息将会丢失,这样显然是不妥的。
我们可以采用ip_hash指令解决这个问题,如果客户已经访问了某个服务器,当用户再次访问时,会将该请求通过哈希算法,自动定位到该服务器。
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。

 upstream xiaohong{
	#服务资源
	#配置权重:server 127.0.0.1:8080 weight=1;
	ip_hash;
	server 127.0.0.1:8080 weight=1;
	server 127.0.0.1:8082 weight=2;
    }

3.3 fair(第三方)

按后端服务器的响应时间来分配请求,响应时间短的优先分配。

upstream xiaohong{
    server server1;
    server server2;
    fair;
}

3.4 url_hash(第三方)

按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。

upstream xiaohong{
    server url1:8080;
    server url2:8080;
    hash $request_uri;
    hash_method crc32;
}

四、每个设备的状态设置为:

1.down 表示单前的server暂时不参与负载
2.weight 默认为1.weight越大,负载的权重就越大。
3.max_fails:允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream模块定义的错误
4.fail_timeout:max_fails次失败后,暂停的时间。
5.backup: 其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。

4.1 nginx.conf完整配置实例:

#user  nobody;
worker_processes  4;
events {
    # 最大并发数
    worker_connections  1024;
}
http{
    # 待选服务器列表
    upstream myproject{
        # ip_hash指令,将同一用户引入同一服务器。
        ip_hash;
        server 125.219.42.4 fail_timeout=60s;
        server 172.31.2.183;
        }

    server{
                # 监听端口
                # 启动nginx.exe后浏览器要访问的地址端口,
                # 如:localhost:80,就会访问到upstream myproject里的两个服务
                listen 80;
                # 根目录下
                location / {
                    # 选择哪个服务器列表
                    proxy_pass http://myproject;
                }

            }
}

网站公告

今日签到

点亮在社区的每一天
去签到