vlambda博客
学习文章列表

Nginx通过反向代理实现负载均衡

前面有文章介绍了Nginx的简单配置和使用,这篇文章介绍一下,如何通过Nginx的反向代理实现负载均衡

反向代理

正向代理

使用过vpn的朋友都知道,我们访问外网的时候,需要设置代理,这种情况,我们访问google的时候,我们知道实际上是通过哪个管道去访问的,也就是被我们所感知的,这种就是正向代理。

负载均衡

简单而言就是当有2台或以上服务器时,根据规则随机的将请求分发到指定的服务器上处理,负载均衡配置一般都需要同时配置反向代理,通过反向代理跳转到负载均衡。而Nginx目前自带3种负载均衡策略,还有2种常用的第三方策略,下面的实验只是

在一台虚拟机上实现负载均衡,原理和在多台上面是一样的。

实现过程

搭建Nginx环境

看这里:Nginx在linux下的安装和简单配置使用

配置Nginx:nginx.conf配置

在vhost目录下配置两台虚拟机,这里分别命名为test.conf,test1.conf

Nginx通过反向代理实现负载均衡

配置test.conf,监听的端口为8080,root目录为/data/test/html,,在该目录下生成index.html文件,文件内容直接输出:nginx:8080;

同理,test1.conf,监听的端口为8081,root目录为/data/test1/html,在该目录下生成index.html文件,文件内容直接输出:nginx:8081。

配置如下

Nginx通过反向代理实现负载均衡

重启Nginx

/usr/local/nginx/sbin/nginx -s reload


总结

Nginx负载均衡关键代码在于这里:

upstream testnginx { server 192.168.18.87:8080 weight=5; server 192.168.18.87:8081 weight=5; } server { listen 80; server_name 192.168.16.87; client_max_body_size 1024M;
location / { proxy_pass http://testnginx; proxy_set_header Host $host:$server_port; } }

我们通过访问192.168.16.87,实际上Nginx会根据设置的权重(weight参数就是表示权重的意思)去选择访问8080,8081这两个端口,如果你有两台机器,就是访问两台机器了,当8081这端口挂了,也就是说8081这台机器挂了,实际上不会影响到用户的正常访问,Nginx会让用户跑到8080这个端口或者这台机器上去。理论上和DNS轮询方式实现的负载均衡是一个道理的,不同的是DNS轮询没有权重的设置。

这种只是简单的模式,这种方式有个问题,那就是下一个请求来的时候请求可能分发到另外一个服务器,当我们的程序不是无状态的时候(采用了session保存数据),这时候就有一个很大的很问题了,比如把登录信息保存到了session中,那么跳转到另外一台服务器的时候就需要重新登录了,所以很多时候我们需要一个客户只访问一个服务器,那么就需要用iphash了,iphash的每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。配置如下:

upstream testnginx { ip_hash; server 192.168.18.87:8080 weight=5; server 192.168.18.87:8081 weight=5; }

你可能感兴趣的文章: