一、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
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
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