阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Nginx负载均衡配置实例详解

217次阅读
没有评论

共计 4034 个字符,预计需要花费 11 分钟才能阅读完成。

负载均衡是我们大流量网站要做的一个东西,下面我来给大家介绍在 Nginx 服务器上进行负载均衡配置方法,希望对有需要的同学有所帮助哦。

负载均衡

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

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

测试域名:a.com

A 服务器 IP:192.168.5.149(主)

B 服务器 IP:192.168.5.27

C 服务器 IP:192.168.5.126

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

域名解析

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

打开:C:WindowsSystem32driversetchosts

在末尾添加

192.168.5.149    a.com

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

从截图上看已成功将 a.com 解析到 192.168.5.149IP

A 服务器 nginx.conf 设置
打开 nginx.conf,文件位置在 nginx 安装目录的 conf 目录下。

在 http 段加入以下代码

upstream a.com {
      server  192.168.5.126:80;
      server  192.168.5.27:80;
}
 
server{
    listen 80;
    server_name a.com;
    location / {
        proxy_pass        http://a.com;
        proxy_set_header  Host            $host;
        proxy_set_header  X-Real-IP        $remote_addr;
        proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;
    }
}

保存重启 nginx

B、C 服务器 nginx.conf 设置
打开 nginx.confi,在 http 段加入以下代码

server{
    listen 80;
    server_name a.com;
    index index.html;
    root /data0/htdocs/www;
}

保存重启 nginx

测试
当访问 a.com 的时候,为了区分是转向哪台服务器处理我分别在 B、C 服务器下写一个不同内容的 index.html 文件,以作区分。

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

B 服务器处理页面

C 服务器处理页面

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

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

访问结果:

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

如果 b.com 也要设置负载均衡怎么办?
很简单,跟 a.com 设置一样。如下:

假设 b.com 的主服务器 IP 是 192.168.5.149,负载均衡到 192.168.5.150 和 192.168.5.151 机器上

现将域名 b.com 解析到 192.168.5.149IP 上。

在主服务器 (192.168.5.149) 的 nginx.conf 加入以下代码:

upstream b.com {
      server  192.168.5.150:80;
      server  192.168.5.151:80;
}
 
server{
    listen 80;
    server_name b.com;
    location / {
        proxy_pass        http://b.com;
        proxy_set_header  Host            $host;
        proxy_set_header  X-Real-IP        $remote_addr;
        proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;
    }
}
保存重启 nginx

在 192.168.5.150 与 192.168.5.151 机器上设置 nginx,打开 nginx.conf 在末尾添加以下代码:

server{
    listen 80;
    server_name b.com;
    index index.html;
    root /data0/htdocs/www;
}

保存重启 nginx

完成以后步骤后即可实现 b.com 的负载均衡配置。

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

如以上案例三台服务器:

A 服务器 IP:192.168.5.149(主)

B 服务器 IP:192.168.5.27

C 服务器 IP:192.168.5.126

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

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

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

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

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

server{
    listen 8080;
    server_name a.com;
    index index.html;
    root /data0/htdocs/www;
}
 
重启 nginx,在浏览器输入 a.com:8080 试试看能不能访问。结果可以正常访问

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

upstream a.com {
      server  192.168.5.126:80;
      server  192.168.5.27:80;
      server  127.0.0.1:8080;
}

由于这里可以添加主服务器 IP192.168.5.149 或者 127.0.0.1 均可以,都表示访问自己。

重启 Nginx,然后再来访问 a.com 看看会不会分配到主服务器上。

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

最后
一、负载均衡不是 nginx 独有,著名鼎鼎的 apache 也有,但性能可能不如 nginx。

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

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

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

————————————– 分割线 ————————————–

Nginx 负载均衡配置实战  http://www.linuxidc.com/Linux/2014-12/110036.htm

CentOS 6.2 实战部署 Nginx+MySQL+PHP http://www.linuxidc.com/Linux/2013-09/90020.htm

使用 Nginx 搭建 WEB 服务器 http://www.linuxidc.com/Linux/2013-09/89768.htm

搭建基于 Linux6.3+Nginx1.2+PHP5+MySQL5.5 的 Web 服务器全过程 http://www.linuxidc.com/Linux/2013-09/89692.htm

CentOS 6.3 下 Nginx 性能调优 http://www.linuxidc.com/Linux/2013-09/89656.htm

CentOS 6.3 下配置 Nginx 加载 ngx_pagespeed 模块 http://www.linuxidc.com/Linux/2013-09/89657.htm

CentOS 6.4 安装配置 Nginx+Pcre+php-fpm http://www.linuxidc.com/Linux/2013-08/88984.htm

Nginx 安装配置使用详细笔记 http://www.linuxidc.com/Linux/2014-07/104499.htm

Nginx 日志过滤 使用 ngx_log_if 不记录特定日志 http://www.linuxidc.com/Linux/2014-07/104686.htm

————————————– 分割线 ————————————–

Nginx 的详细介绍:请点这里
Nginx 的下载地址:请点这里

本文永久更新链接地址:http://www.linuxidc.com/Linux/2015-07/120738.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-20发表,共计4034字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中