服务器

位置:IT落伍者 >> 服务器 >> 浏览文章

Nginx负载均衡配置实例详解


发布日期:2020年01月16日
 
Nginx负载均衡配置实例详解
负载均衡是我们大流量网站要做的一个东西下面我来给大家介绍在Nginx服务器上进行负载均衡配置方法希望对有需要的同学有所帮助哦

负载均衡

先来简单了解一下什么是负载均衡单从字面上的意思来理解就可以解释N台服务器平均分担负载不会因为某台服务器负载高宕机而某台服务器闲置的情况那么负载均衡的前提就是要有多台服务器才能实现也就是两台以上即可

测试环境
由于没有服务器所以本次测试直接host指定域名然后在VMware里安装了三台CentOS

测试域名 acom

A服务器IP (主)

B服务器IP

C服务器IP

部署思路
A服务器做为主服务器域名直接解析到A服务器()上由A服务器负载均衡到B服务器()与C服务器()上

域名解析

由于不是真实环境域名就随便使用一个acom用作测试所以acom的解析只能在hosts文件设置

打开C:WindowsSystemdriversetchosts

在末尾添加

acom

保存退出然后启动命令模式ping下看看是否已设置成功

从截图上看已成功将acom解析到IP

A服务器pstream acom {
server :;
server :;
}

server{
listen ;
server_name acom;
location / {
proxy_pass ;
proxy_set_header Host $host;
proxy_set_header XRealIP $remote_addr;
proxy_set_header XForwardedFor $proxy_add_x_forwarded_for;
}
}

保存重启nginx

BC服务器nginxconf设置
打开nginxconfi在http段加入以下代码

server{
listen ;
server_name acom;
index indexhtml;
root /data/htdocs/www;
}

保存重启nginx

测试
当访问acom的时候为了区分是转向哪台服务器处理我分别在BC服务器下写一个不同内容的indexhtml文件以作区分

打开浏览器访问acom结果刷新会发现所有的请求均分别被主服务器()分配到B服务器()与C服务器()上实现了负载均衡效果

B服务器处理页面

C服务器处理页面

假如其中一台服务器宕机会怎样?
当某台服务器宕机了是否会影响访问呢?

我们先来看看实例根据以上例子假设C服务器这台机子宕机了(由于无法模拟宕机所以我就把C服务器关机)然后再来访问看看

访问结果

我们发现虽然C服务器()宕机了但不影响网站访问这样就不会担心在负载均衡模式下因为某台机子宕机而拖累整个站点了

如果bcom也要设置负载均衡怎么办?
很简单跟acom设置一样如下

假设bcom的主服务器IP是负载均衡到机器上

现将域名bcom解析到IP上

在主服务器()的nginxconf加入以下代码

upstream bcom {
server :;
server :;
}

server{
listen ;
server_name bcom;
location / {
proxy_pass ;
proxy_set_header Host $host;
proxy_set_header XRealIP $remote_addr;
proxy_set_header XForwardedFor $proxy_add_x_forwarded_for;
}
}
保存重启nginx

机器上设置nginx打开nginxconf在末尾添加以下代码

server{
listen ;
server_name bcom;
index indexhtml;
root /data/htdocs/www;
}

保存重启nginx

完成以后步骤后即可实现bcom的负载均衡配置

主服务器不能提供服务吗?
以上例子中我们都是应用到了主服务器负载均衡到其它服务器上那么主服务器本身能不能也加在服务器列表中这样就不会白白浪费拿一台服务器纯当做转发功能而是也参与到提供服务中来

如以上案例三台服务器

A服务器IP (主)

B服务器IP

C服务器IP

我们把域名解析到A服务器然后由A服务器转发到B服务器与C服务器那么A服务器只做一个转发功能现在我们让A服务器也提供站点服务

我们先来分析一下如果添加主服务器到upstream中那么可能会有以下两种情况发生

主服务器转发到了其它IP上其它IP服务器正常处理

主服务器转发到了自己IP上然后又进到主服务器分配IP那里假如一直分配到本机则会造成一个死循环

怎么解决这个问题呢?因为端口已经用来监听负载均衡的处理那么本服务器上就不能再使用端口来处理acom的访问请求得用一个新的于是我们把主服务器的nginxconf加入以下一段代码

server{
listen ;
server_name acom;
index indexhtml;
root /data/htdocs/www;
}

重启nginx在浏览器输入acom:试试看能不能访问结果可以正常访问

既然能正常访问那么我们就可以把主服务器添加到upstream中但是端口要改一下如下代码

upstream acom {
server :;
server :;
server :;
}

由于这里可以添加主服务器IP或者均可以都表示访问自己

重启Nginx然后再来访问acom看看会不会分配到主服务器上

主服务器也能正常加入服务了

最后
负载均衡不是nginx独有着名鼎鼎的apache也有但性能可能不如nginx

多台服务器提供服务但域名只解析到主服务器而真正的服务器IP不会被ping下即可获得增加一定安全性

upstream里的IP不一定是内网外网IP也可以不过经典的案例是局域网中某台IP暴露在外网下域名直接解析到此IP然后又这台主服务器转发到内网服务器IP中

某台服务器宕机不会影响网站正常运行Nginx不会把请求转发到已宕机的IP上

上一篇:nginx 504 Gateway Time-out错误解决办法

下一篇:nginx用cookie控制访问权限实现方法