Nginx反向代理与负载均衡
集群
集群就是指一组或若干个相互独立的计算机,利用高速通信网络组成的一个较大的计算机服务系统,每个集群节点(即集群中的每台计算机)都是运行各自服务的独立服务器。集群给用户的感觉就是一台服务器,而实际用户请求的是一组集群服务器。
负载均衡集群
负载均衡集群可以把许多客户集中的访问请求负载压力尽可能平均地分摊在计算机集群中处理。这样的系统非常适合使用同一组应用程序为大量用户提供服务的模式,每个节点都可以承担一定的访问请求负载压力,并且可以实现访问请求在各节点之间动态分配,以实现负载均衡。
负载均衡典型的开源软件包括:LVS、Nginx、Haproxy。
集群架构图
Nginx反向代理
比如:当请求到图片文件时,可以配置Nginx为代理服务器,图片实际真实存放在Apache服务器中,在Nginx服务器上只需要进行配置Apache服务器的地址就行可以了。
location ~ \.(jpg|jpeg|png|gif)$ {
proxy_set_header X-Forwarded-For $remote_addr; #将用户真实IP地址携带到Apache服务器上
proxy_pass http://123.123.123.123:80; #Apache服务器的IP和端口
}
Nginx负载均衡
准备服务器
由于博主硬件资源有限,只有一台租借的机器,我们就在这一台机器上实现Nginx的负载均衡,没错,你没有看错,我就是要在一台机器上搭建Nginx负载均衡器,两台web服务器。
安装Nginx
这个不用说了,可以去看我的文章,编译LNMP环境
配置Nginx负载均衡服务器
下面的配置是关于配置负载均衡器的,我们有两台服务器节点,虽然是一台机器,但是基于不同端口的web服务器节点。
http{
...
#配置web服务器池,包含了两个web服务器节点
upstream www_server_pools{
server 123.206.176.159:8080 weight=1;#8080端口,权重为1
server 123.206.176.159:8081 weight=1;#8081端口,权重为1
}
server {#负载均衡器域名虚拟主机
listen 80;
server_name test1.com test2.com;#两台web服务器节点的访问域名
location / {
proxy_pass http://www_server_pools;#访问test1.com或test2.com时,将请求发送给www_server_pools里面的web服务器节点
proxy_set_header Host $host;#携带主机名去请求web服务器节点
}
}
}
配置web服务器节点
(1)配置123.206.176.159:8080
节点
http{
...
server {#test1虚拟主机
listen 8080;
server_name test1.com;
location /{
root html/test1; #显示test1项目
index index.html index.htm;
}
}
server {#test2虚拟主机
listen 8080;
server_name test2.com;
location /{
root html/test2;#显示test2项目
index index.html index.htm;
}
}
}
(2)配置123.206.176.159:8081
节点
http{
...
server {#test1虚拟主机
listen 8081;
server_name test1.com;
location /{
root html/test3;#显示test3项目
index index.html index.htm;
}
}
server {#test2虚拟主机
listen 8081;
server_name test2.com;
location / {
root html/test4;#显示test4项目
index index.html index.htm;
}
}
}
看到这里,有同学应该会觉得为什么会建立4个项目,test1,test2,test3,test4,难道不是只应该建立2个项目吗?由于我这里是在一台Nginx服务器上进行的实验,所以为了实验结果不同,我建立了4个项目,分别在4个项目中新建了index.html
,内容如下:
test1/index.html文件:I am test1 server,port:8080
test2/index.html文件:I am test2 server,port:8080
test3/index.html文件:I am test1 server,port:8081
test4/index.html文件:I am test2 server,port:8081
配置host文件
记住这里对应的应该是负载均衡服务器的IP地址,不是web服务器的IP地址哦,虽然我这里web服务器的IP地址和负载均衡器的IP地址相同。
123.206.176.159 test1.com
123.206.176.159 test2.com
实验结果
可以很容易的看出来,当我第一次访问test1.com
的时候,端口可能是8080,当我们第二次请求的时候,端口为8081,负载均衡服务器默认采用轮询机制,然后我们分配的权重是1:1,所以一次请求是8080,另一次请求就是8081,然后一直重复下去。同理,当我们请求test2.com
是一样的。