nginx服务---负载均衡、平滑升级

一、nginx服务配置属性监控、nginx代理服务和nginx的IP访客黑名单

1.属性监控

通过在编译时加入 nginx 的 ngx_http_stub_status_module 模块可以实时监控以下基本的指标:

部署过程:

 在配置文件/usr/local/nginx/conf/nginx.conf中的server模块中,增加一个location模块。

[root@staticserver nginx-1.26.1]# vim /usr/local/nginx/conf/nginx.conf
 48         location /status {
 49                 stub_status     on;
 50                 access_log      off;
 51         }
[root@staticserver nginx-1.26.1]# /usr/local/nginx/sbin/nginx -s reload   #重新加载

浏览器验证:

 

2.nginx代理服务

代理:将当前的主机做前端服务器,用于接收和响应客户端,代理另外一台主机。

1.基础环境配置

1.克隆一台新主机做dynamicserver动态服务器,修改ip地址和主机名称

[root@staticserver ~]# sh initserver.sh
请输入指定ip地址:192.168.1.20
请输入主机名称dynamicserver

2.修改index.html文件,并且发布任务

[root@dynamicserver ~]# echo "this is java web server" > /usr/local/nginx/html/index.html

3.启动nginx服务

[root@dynamicserver ~]# /usr/local/nginx/sbin/nginx

4.使用curl访问当前项目

[root@dynamicserver ~]# curl localhost
this is java web server

5.浏览器验证

 

 2.反向代理过程

使用30主机代理20主机,当用户访问30主机的时候,30主机不响应,而是由20主机相应。

1.修改配置文件

[root@staticserver ~]# vim /usr/local/nginx/conf/nginx.conf

2.重新加载

[root@staticserver ~]# /usr/local/nginx/sbin/nginx -s reload

3.浏览器验证:输入30主机出现的是20主机的网页内容

现在的静态服务器实际上就是代理服务器,nginx代理其他服务的时候,不需要对方同意,更加方便了模块化操作。

3.nginx的IP访客黑名单

设置服务器允许哪些主机访问,不允许哪些主机访问

1.环境准备

1.克隆一台新主机,IP地址:192.168.1.40  名称:allowdeny

运行脚本:

[root@localhost ~]# source initserver.sh
请输入指定ip地址:192.168.1.40
请输入主机名称allowdeny

2.从30主机获得nginx安装包

[root@allowdeny ~]# scp -r root@192.168.1.30:~/nginx-1.26.1.tar.gz ./
The authenticity of host '192.168.1.30 (192.168.1.30)' can't be established.
ECDSA key fingerprint is SHA256:UHAU+sXTEKYh1El+VOBaor4NjGsmwOi0Cz/Iwdcf5OQ.
ECDSA key fingerprint is MD5:ef:a6:e8:1a:c3:ce:7e:f4:c9:4e:a0:a5:4e:f6:a1:2b
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.1.30' (ECDSA) to the list of known hosts.
root@192.168.1.30's password:
nginx-1.26.1.tar.gz                                    100% 1216KB  52.3MB/s   00:00   

3.下载依赖包并解压

[root@allowdeny ~]# yum -y install gcc gcc-c++ make pcre-devel openssl-devel
[root@allowdeny nginx-1.26.1]# tar -zxvf nginx-1.26.1.tar.gz

4.进行预编译和编译安装

[root@allowdeny nginx-1.26.1]# cd nginx-1.26.1/
[root@allowdeny nginx-1.26.1]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module --with-stream
[root@allowdeny nginx-1.26.1]# make && make install

5.创建账户

[root@allowdeny nginx-1.26.1]# useradd -s /bin/nologin -M nginx

6.启动nginx服务

[root@allowdeny nginx-1.26.1]# /usr/local/nginx/sbin/nginx

7.发布项目并验证

[root@allowdeny nginx-1.26.1]# echo "your are lickly" > /usr/local/nginx/html/index.html
[root@allowdeny nginx-1.26.1]# curl localhost
your are lickly

 20主机也可以访问到:

[root@dynamicserver ~]# curl 192.168.1.40
your are lickly

 30主机也可以:

[root@staticserver ~]# curl 192.168.1.40
your are lickly
2.设置黑名单,白名单

设置除开20主机可以访问,其他都不可以访问

[root@allowdeny nginx-1.26.1]# vim /usr/local/nginx/conf/nginx.conf
 ...
server {
...
        charset  utf-8;
        allow    192.168.1.20;
        deny     192.168.1.0/24;
        deny     all;
...
}

重新加载

[root@allowdeny nginx-1.26.1]# /usr/local/nginx/sbin/nginx -s reload

验证:

20主机可以访问:

[root@dynamicserver ~]# curl 192.168.1.40
your are lickly

30主机不可以访问:

[root@staticserver ~]# curl 192.168.1.40
<html>
<head><title>403 Forbidden</title></head>
<body>
<center><h1>403 Forbidden</h1></center>
<hr><center>nginx/1.26.1</center>
</body>
</html>

40主机不可以访问:

[root@allowdeny nginx-1.26.1]# curl localhost
<html>
<head><title>403 Forbidden</title></head>
<body>
<center><h1>403 Forbidden</h1></center>
<hr><center>nginx/1.26.1</center>
</body>
</html>

初始安装nginx的时候logs日志文件

[root@allowdeny nginx-1.26.1]# cd /usr/local/nginx/

二、负载均衡

1.负载均衡原理

        负载均衡NAT(Network Address Translation网络地址转换)简单地说就是将一个IP地址转换为另一个IP地址,一般用于未经注册的内部地址与合法的、已获注册的Internet IP地址间进行转换。适用于解决Internet IP地址紧张、不想让网络外部知道内部网络结构等的场合下。系统的扩展可以分为纵向扩展和横向扩展。

纵向扩展:从单机的角度出发,通过增加系统的硬件处理能力来提升服务器的处理能力;

横向扩展:通过添加机器来满足大型网站服务的处理能力。

2.负载均衡作用

        解决服务器的高并发压力,提高应用程序的处理性能;

        提供故障转移,实现高可用;

        通过添加或减少服务器数量,增强网站的可扩展性;

        在负载均衡器上进行过滤,可以提高系统的安全性;

3.nginx七层负载均衡配置

准备四台机器:

一台静态服务器:staticserver   192.168.1.30

三台动态服务器:dynamic001   192.168.1.21

                             dynamic002   192.168.1.22

                             dynamic003   192.168.1.23

1.七层负载均衡基础配置

1.发布项目,四个主机都发布项目

[root@staticserver ~]# echo "i am static server" > /usr/local/nginx/html/index.html
[root@staticserver ~]# vim /usr/local/nginx/conf/nginx.conf
[root@staticserver ~]# /usr/local/nginx/sbin/nginx -s reload
[root@dynamic001 ~]# echo "i am dynamic server 001" > /usr/local/nginx/html/index.html
[root@dynamic001 ~]# /usr/local/nginx/sbin/nginx
[root@dynamic002 ~]# echo "i am dynamic server 002" > /usr/local/nginx/html/index.html
[root@dynamic002 ~]# /usr/local/nginx/sbin/nginx
[root@dynamic003 ~]# echo "i am dynamic server 003" > /usr/local/nginx/html/index.html
[root@dynamic003 ~]# /usr/local/nginx/sbin/nginx

2.验证:

 3.修改配置文件

[root@staticserver ~]# vim /usr/local/nginx/conf/nginx.conf
...
        upstream server_group_name {
                server 192.168.1.21:80;
                server 192.168.1.22:80;
                server 192.168.1.23:80;
        }
...

[root@staticserver ~]# /usr/local/nginx/sbin/nginx -s reload

4.验证:不断刷新就可以每次都是由不同的机器代理的。

2.负载均衡状态

3.负载均衡策略

1.轮询

将002主机设置为down,不参与轮询

[root@staticserver ~]# vim /usr/local/nginx/conf/nginx.conf
...
        upstream server_group_name {
                server 192.168.1.21:80;
                server 192.168.1.22:80 down;
                server 192.168.1.23:80;
        }
...
[root@staticserver ~]# /usr/local/nginx/sbin/nginx -s reload

验证只有001和003

在配置文件中恢复002的服务,直接在002的主机上服务停止验证:

2.权重

设置权重weight,数字大的任务重

[root@staticserver ~]# vim /usr/local/nginx/conf/nginx.conf

[root@staticserver ~]# /usr/local/nginx/sbin/nginx -s reload

3.Iphash

[root@staticserver ~]# /usr/local/nginx/sbin/nginx -s reload

 upstream server_group_name {

                ip_hash;

                server 192.168.1.21:80 weight=4;

                server 192.168.1.22:80 weight=2;

                server 192.168.1.23:80 weight=1;

#               server www.baidu.com;

        }

验证:第一次是哪个就一直是哪个,不再变化

upstream server_group_name {

                ip_hash;

                #least_conn;       最少连接

                #hash $request_uri;      

                server 192.168.1.21:80 weight=4;

                server 192.168.1.22:80 weight=2;

                server 192.168.1.23:80 weight=1;

#               server www.baidu.com;

        }

三、平滑升级

查看nginx当前版本

[root@staticserver ~]# /usr/local/nginx/sbin/nginx -v
nginx version: nginx/1.26.1

要将1.26版本过渡到1.27版本,通常我们就重装nginx软件,但是遇到正在使用服务的nginx就不可以这样做,这就需要使用平滑升级。

1.下载1.27版本

[root@staticserver ~]# wget https://nginx.org/download/nginx-1.27.0.tar.gz

2.解压与预编译

[root@staticserver nginx-1.27.0]# tar -zxvf nginx-1.27.0.tar.gz
[root@staticserver nginx-1.27.0]# cd nginx-1.27.0/
[root@staticserver nginx-1.27.0]# ./configure --prefix=/usr/local/nginx/ --user=nhinx --group=nginx --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module --with-stream

3.编译安装

[root@staticserver nginx-1.27.0]# make && make install
使用 kill -USR2 启用新版本的 Nginx 的软件
kill -USR2 老版本的 pid 编号

4.查看可执行文件,有两个

[root@staticserver nginx-1.27.0]# ls /usr/local/nginx/sbin/
nginx  nginx.old

不同文件放置不同的版本

[root@staticserver nginx-1.27.0]# /usr/local/nginx/sbin/nginx -v
nginx version: nginx/1.27.0
[root@staticserver nginx-1.27.0]# /usr/local/nginx/sbin/nginx.old -v
nginx version: nginx/1.26.1

5.查看老服务的进程

[root@staticserver nginx-1.27.0]# ps -aux | grep nginx
root       1341  0.0  0.1  48244  2468 ?        Ss   10:15   0:00 nginx: master process /usr/local/nginx/sbin/nginx
nginx      6834  0.0  0.1  48696  2072 ?        S    15:55   0:00 nginx: worker process
root       9845  0.0  0.0 112824   988 pts/0    R+   16:34   0:00 grep --color=auto nginx

6.使用老的nginx进程创建新的进程

[root@staticserver nginx-1.27.0]# kill -USR2 1277
[root@staticserver nginx-1.27.0]# ps -ef|grep nginx
此时会出现两套 master 进程,这个时候处理客户请求的就是新的 nginx 服务了。

7.关闭老版本的所有子进程和老版本的主进程

[root@staticserver nginx-1.27.0]# kill -WINCH 1278
[root@staticserver nginx-1.27.0]# kill -QUIT 1277
[root@staticserver nginx-1.27.0]# ps -ef|grep nginx

8.使用curl 查看当前服务器的版本

[root@staticserver nginx-1.27.0]# curl -I localhost
HTTP/1.1 403 Forbidden
Server: nginx/1.27.0
Date: Mon, 29 Jul 2024 16:42:32 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 153
Connection: keep-alive

  • 29
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值