Nginx负载均衡的实现(进阶篇)

时隔一周再次更新文章,同样的风格不同的味道

四、Nginx纵深对比

Nginx 和 apache 的优缺点

1.nginx 相对于 apache 的优点:

轻量级,同样是 web 服务,比 apache 占用更少的内存及资源高并发, nginx 处理请求是异步非阻塞(如前端 ajax)的,而 apache 则是阻塞型的,在高并发下 nginx 能保持低资源,低消耗,高性能,高度模块化的设计。

2.apache 相对于 nginx 的优点:

Rewrite 重写 ,比 nginx 的 rewrite 模块多,基本想到的都可以找到并且少 bug ,nginx 的 bug 相对较多,apache(出身好起步高)。

3.Nginx 配置简洁, Apache 复杂

几种常用web服务器对比
对比项\服务器ApacheNginxLighttpd
Proxy代理非常好非常好一般
Rewriter非常好一般
Fcgi不好非常好
热部署不支持支持不支持
系统压力很大很小比较小
稳定性非常好不好
安全性一般一般
静态文件处理一般非常好
反向代理一般非常好一般

@Author:lanyy699

五、Nginx实战安装

5-1、安装依赖

[root@lanyy ~]#yum install gcc-c++ -y

# nginx依赖包如下
[root@lanyy ~]#gcc openssl-devel pcre-devel zlib-devel

# 安装
[root@lanyy ~]#yum -y install gcc openssl-devel pcre-devel zlib-devel

5-2、解压文件

[root@lanyy ~]#tar -zxf nginx-1.8.1.tar.gz  -C /opt/software/

5-3、configure配置

进入解压后的源码目录,然后执行 configure 命令进行编译配置到指定目录下

# 先创建目录
[root@lanyy ~]#mkdir -p /usr/soft/nginx
[root@lanyy ~]#./configure --prefix=/usr/soft/nginx

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BUOGqkPs-1603798678243)(D:\VX公众号\Nginx高并发处理.assets\image-20201012194753190.png)]

5-4、编译安装

make && make install

安装好后,会在 /usr/soft 下生成 nginx 目录(这是我编译前指定的),这个目录就是 nginx 的软件。

5-5、Nginx命令

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ADs7IXHJ-1603798678247)(D:\VX公众号\Nginx高并发处理.assets\image-20201012195624010.png)]

启动后,访问虚拟机的 80 端口,可查看到Nginx初始界面,一旦 nginx 启动,就可以通过调用带有-s 参数的可执行文件来控制它。

使用语法:nginx -s 信号

信号可以是下列之一:

stop - 快速关机

quit - 优雅的关机

reload - 重新加载配置文件

reopen - 重新打开日志文件

例如,要停止 nginx 进程并等待工作进程完成当前请求的服务,可以执行以下命令:./nginx -s quit

@Author:lanyy699

六、Nginx配置详解

6-1、nginx默认配置详解

# 进程数,建议设置和 CPU 个数一样或 2 倍
worker_processes	2;
# 日志级别
error_log	logs/error.log	warning;(默认 error 级别)
# nginx 启动后的 pid 存放位置(nginx默认进程18621)
# pidlogs/nginx.pid;

events {
    #配置每个进程的连接数,总的连接数= worker_processes * worker_connections,根据cpu和内存大小来配置,默认1024
        worker_connections 10240;
}

http {
    include	mime.types;
    default_type	application/octet-stream;
	sendfile	on;
    # 连接超时时间,单位秒
    keepalive_timeout	65;

    server {
    listen	80;
    server_name	localhost
    # 默认请求
    location / {
    root  html;	# 定义服务器的默认网站根目录位置
    index	index.php index.html index.htm;  # 定义首页索引文件的名称
    }
	# 重定向去错误服务页面
    error_page	500 502 503 504	/50x.html;
    location = /50x.html {
    	root	html;
    }
}

6-2、Nginx负债均衡配置

nginx 支持以下负载均衡机制(或方法):

  • a) 循环 - 对应用程序服务器的请求以循环方式分发,
  • b) 最少连接数 - 将下一个请求分配给活动连接数最少的服务器,
  • c) ip-hash - 哈希函数用于确定下一个请求(基于客户端的 IP 地址)应该选择哪个服务器。
6-2-0、默认负载平衡配置

使用 nginx 进行负载平衡的最简单配置可能如下所示:

http {
	upstream lanyy{
		server srv1.example.com;
        server srv2.example.com;
        server srv3.example.com;
	}

	server {
        listen 80;
        server_name	localhost;
        location / {
			proxy_pass http://lanyy;
		} 
	}
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-W6R6MmiF-1603798678259)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20201011150233753.png)]

在上面的示例中,在 srv1-srv3 上运行相同应用程序的 3 个实例。

如果没有专门配置负载均衡方法,则默认为循环法。所有请求都被代理到服务器组 shsxt,并且 nginx 应用 HTTP 负载平衡来分发请求。

6-2-1、轮询负载平衡

轮询【Round Robin】:请求在服务器上平均分配,与服务器权重有关,默认权重为1,即平均分配

upstream backend {
   server backend1.example.com;
   server backend2.example.com;
}
6-2-2、加权负载平衡

通过使用服务器权重,还可以进一步影响 nginx 负载均衡算法,谁的权重越大,分发到的请求就越多。(如下所示srv1占60%的权重,保证5次访问中3次出现srv1,并不是按照顺序出现)

upstream lanyy {
    server srv1.example.com weight=3; 
    server srv2.example.com
    server srv3.example.com;

}
6-2-3、最小连接负载平衡

在连接负载最少的情况下,nginx会尽量避免将过多的请求分发给繁忙的应用程序服务器,而是将新请求分发给不太繁忙的服务器,避免服务器过载。

upstream lanyy {
    least_conn;
        server srv1.example.com;
        server srv2.example.com;
        server srv3.example.com;
    }
6-2-4、会话持久性

上述的循环是最少连接数的负载平衡方法,每个后续客户端的请求都可能被分发到不同的服务器。不能保证相同的客户端总是定向到相同的服务器。

如果需要将客户端绑定到特定的应用程序服务器,换句话说,就是始终选择相同的服务器而言,就要使客户端的会话“粘滞”或“持久”,ip-hash 负载平衡机制就是有这种特性。使用 ip-hash,客户端的 IP 地址将用作散列键,以确定应该为客户端的请求选择服务器组中的哪台服器,此方法可确保来自同一客户端的请求将始终定向到同一台服务器,除非此服务器不可用。

upstream lanyy {
    ip_hash;
        server srv1.example.com;
        server srv2.example.com;
        server srv3.example.com;
    }

6-3、Nginx访问控制机制

Nginx 还可以对 IP 的访问进行控制,allow 代表允许,deny 代表禁止.

location / {
    allow 192.168.78.0/24;
    deny 192.168.78.1;
    allow 10.1.1.0/16;
    allow 192.168.1.0/32;
    deny all;
    proxy_pass http://lanyy;
}

从上到下的顺序,匹配到了便跳出。如上的例子先禁止了 192.168.78.1,接下来允许了 3 个网段,其中包含了一个 ipv6,最后未匹配的 IP 全部禁止访问。

@Author:lanyy699
下一篇Nginx完结篇,欢迎伙伴订阅,主要科普一下虚拟主机,正反代理,Session记录机制。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

会撸代码的懒羊羊

打赏5元,买杯咖啡醒,继续创作

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值