反向代理配置、负载均衡配置、动静分离
Nginx:http服务器(网络静态资源服务器)反向代理 Tomcat服务器:动态请求 + 静态资源 Nginx:静态请求
概念
正向代理
比如要访问youtube,但是不能直接访问,只能先找个翻墙软件,通过翻墙软件才能访问youtube. 这种方式就叫做正向代理。
代理服务器就能穿过防火墙
正向代理:
- 客户端是知道目标地址
- 代理服务器代理的是客户端
反向代理
指的是用户要访问youtube,但是youtube悄悄地把这个请求交给后台N台服务器中的其中一台来做,这种方式就是反向代理了。
- 代理服务器主要是给后台应用提供服务
- 对于用户来说,根本不知道请求的URI 是哪个服务器提供的服务
安装
- 将二进制资源包拖入
/usr/local/soft中 - 安装一些正则插件
yum -y install gcc gcc-c++ autoconf automake make
yum install pcre -y
yum install pcre-devel -y
yum install zlib -y
yum install zlib-devel -y
- 解压
tar -zxvf nginx-1.18.0.tar.gz -C /usr/local/src
- 配置
cd /usr/local/src/nginx-1.18.0/
./configure --prefix=/usr/local/nginx
- 编译安装
cd /usr/local/src/nginx-1.18.0/
make && make install
- 查看目录
cd /usr/local/nginx/
启动命令
/usr/local/nginx/sbin/nginx
netstat -ntlp
关闭命令:/usr/local/nginx/sbin/nginx -s stop
重启命令:/usr/local/nginx/sbin/nginx -s reopen
重载命令:/usr/local/nginx/sbin/nginx -s reload
端口默认是 80
192.168.202.3:80
切换 processes
日志
/usr/local/nginx/logs
tail -n 100 -f access.log
日志切分
ll -h 查看文件大小
1.4k 最好日志文件别超过100M 日志文件会按天生成
脚本文件
搞一个准备好的脚本文件 backuplog.sh
根据图内脚本 创建一个datalogs 作为备份数据
BAK_TIME=/bin/date -d yesterday +%Y%m%d%H%M
因为演示 这里是按分钟来的 具体可以按天
创建脚本
到sbin里面创建 backuplog.sh 脚本
#!/bin/sh
BASE_DIR=/usr/local/nginx
BASE_FILE_NAME=access.log
CURRENT_PATH=$BASE_DIR/logs
BAK_PATH=$BASE_DIR/datalogs
CURRENT_FILE=$CURRENT_PATH/$BASE_FILE_NAME
BAK_TIME=`/bin/date -d yesterday +%Y%m%d%H%M`
BAK_FILE=$BAK_PATH/$BAK_TIME-$BASE_FILE_NAME
mv $CURRENT_FILE $BAK_FILE
$BASE_DIR/sbin/nginx -s reopen
添加执行权限
chmod +x backuplog.sh
变色
执行脚本 文件内容会被移动走了 并有日志文件生成
/usr/local/nginx/sbin/backuplog.sh
添加linux的定时任务
crontab -e
*/1 * * * * sh /usr/local/nginx/sbin/backuplog.sh
每分钟 备份 可怕😨 😄
项目连接
1.把后台服务搭建好 部署数据Mysql,运行jar包 2.修改配置文件,把请求转发到后台应用
这是一个springboot项目 所以tomcat 应该是不需要安装的 打出来包的ip地址和实际可能不一样,所以搞一个 yml 会覆盖jar里面的配置
必须是可执行jar包
多个main方法指定一下main方法
111
后台启动
upstream
检查语法是否错误 重启
自己测试
安装数据库 然后跑一下sql
cd /usr/local/soft/crm
java -jar crm-2.0.0.jar
按control + z 退出
后台启动吧
nohup java -jar crm-2.0.0.jar &
替换 location
原来
location / {
root html;
index index.html index.htm;
}
替换
location / {
#root html;
#index index.html index.htm;
proxy_pass http://192.168.202.3:9999;
}
cd /usr/local/nginx/
// 检查语法
sbin/nginx -t
//reload
sbin/nginx -s reload
清理缓存
不清理 登陆不进去 然后 自己的一些 掘金账号也要重新登陆 😓
worker_processes 2;
每个woker的请求连接数 worker_connections 1024;
upstream
upstream crm {
server 192.168.202.3:9999;
}
然后更新一波
/usr/local/nginx/sbin/nginx -t
/usr/local/nginx/sbin/nginx -s reload
负载均衡
解决方案一:IP hash 解决方案二:分布式解决方案 Redis + Token
获取真实ip
动静分离
解压静态资源到可查找目录
在根目录创建 datas
// 递归创建
mkdir -p /datas/crm
解压
cd /usr/local/soft/crm/
解压缩指定目录
unzip static.zip -d /datas/crm/
pwd 获取全路径 /datas/crm/static
加入location正则 进行静态资源匹配
静态资源压缩
- #gzip on;把 #去掉 添加下面
gzip on;
gzip_min_length 1k;
gzip_comp_level 2;
gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript;
gzip_vary on;
验证就是 一些js 文件就变小了。
Https 支持
ssl证书
安装openssl
yum install -y openssl openssl-devel
给模块添加https支持
cd /usr/local/src/nginx-1.18.0
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
然后编译一下
make
先备份 之前的nginx
cd /usr/local/nginx/sbin/
cp nginx nginx.old
强制覆盖
cp -f /usr/local/src/nginx-1.18.0/objs/nginx ./
-
就的Nginx执行程序替换为新的执行程序(备份起来)
-
向Master发送USER2信号 kill -s SIGUSR2 1254
-
Master进程修改PID文件名, 加后缀.oldbin
-
Master进程使用新的执行程序启动
-
向老的Master进程发送QUIT信号,关闭老的进程
kill -QUIT 1254
ps -ef|grep nginx
ssl 自己生成
到 cd /usr/local/nginx/sbin/ 里面生成 serer.key
openssl genrsa -des3 -out server.key 1024
输入123456
输入123456
生成证书
openssl req -new -key server.key -out server.csr
openssl rsa -in server.key -out server_nopass.key
到conf配置 ssl支持
server {
listen 443 ssl;
server_name 127.0.0.1;
ssl_certificate /usr/local/nginx/sbin/server.crt;
ssl_certificate_key /usr/local/nginx/sbin/server_nopass.key;
location / {
proxy_pass http://crm;
}
}
跨域
也可以在代码中设置
缓存
默认没有的 可配置 不写流程了因为不配置不影响啥 😄
这里目录 会自动创建 无需自己创建了 datas/cache
限流
令牌桶算法
漏桶算法
限制并发连接数
也都是以配置信息形式在 conf中
// 限定一个请求 只是测试哦
限制访问频率
每分钟20次限定
zone 后面one 记得改成addrreq 小问题撒
重写
重定向 测试 拦截所以
搭建高可用环境 Keepalived
在2台机器安装 Nginx
把资源拷贝到其他服务器上
- 安装keepalived依赖 包
yum install gcc openssl-devel libnl3-devel popt-devel iptables-devel libnfnetlink-devel -y
- 上传包 解压 编译
tar -zxvf keepalived-2.0.20.tar.gz -C /usr/local/src/
cd /usr/local/src/keepalived-2.0.20/
./configure --prefix=/usr/local/keepalived
make && make install
- 安装keepalived到Linux服务系统
mkdir /etc/keepalived
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
cp /usr/local/keepalived/sbin/keepalived /etc/init.d/
- 编写nginx检测脚本
vi /etc/keepalived/nginx_check.sh
#!/bin/bash
A=`ps -C nginx –no-header |wc -l`
if [ $A -eq 0 ];then
/usr/local/nginx/sbin/nginx
sleep 2
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
killall keepalived
fi
fi
赋予执行权限
chmod +x /etc/keepalived/nginx_check.sh
修改Master配置
vi /etc/keepalived/keepalived.conf 清空所有内容
然后复制下面内容进去
! Configuration File for keepalived
global_defs {
router_id wolfcode ##路由器标志
}
# 集群资源监控,组合track_script进行
vrrp_script check_haproxy {
script "/etc/keepalived/nginx_check.sh" #检测 nginx 状态的脚本路径
interval 2 #检测时间间隔
weight -20 #条件成立 权重减20
}
vrrp_instance PROXY {
# 设置当前主机为主节点,如果是备用节点,则设置为BACKUP
state MASTER
# 指定HA监测网络接口,可以用ifconfig查看来决定设置哪一个
interface ens32
# 虚拟路由标识,同一个VRRP实例要使用同一个标识,主备机
virtual_router_id 80
# 因为当前环境中VRRP组播有问题,改为使用单播发送VRRP报文 如果VRRP组播没问题,以下这块的内容可以注释掉。
# 这个地方需要关注,之前未做此设置,结果主备节点互相不能发现,因此主备节点都升级成了MASTER,并且绑定了VIP
# 主节点时,内容为:
unicast_src_ip 192.168.122.133
# 设置优先级,确保主节点的优先级高过备用节点
priority 100
# 用于设定主备节点间同步检查时间间隔
advert_int 2
# 设置主备节点间的通信验证类型及密码,同一个VRRP实例中需一致
authentication {
auth_type PASS
auth_pass wolfcode
}
# 集群资源监控,组合vrrp_script进行
track_script {
check_haproxy
}
# 设置虚拟IP地址,当keepalived状态切换为MASTER时,此IP会自动添加到系统中
# 当状态切换到BACKUP时,此IP会自动从系统中删除
# 可以通过命令ip add查看切换后的状态
virtual_ipaddress {
192.168.122.110 #虚拟ip配置完之后就用它访问
}
}
启动
修改Slave配置 【另外一个服务器了】
修改keepalived的Slave配置文件:vi /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id wolfcode ##路由器标志
}
# 集群资源监控,组合track_script进行
vrrp_script check_haproxy {
script "/etc/keepalived/nginx_check.sh" #检测 nginx 状态的脚本路径
interval 2 #检测时间间隔
weight -20 #条件成立 权重减20
}
vrrp_instance PROXY {
# 设置当前主机为主节点,如果是备用节点,则设置为BACKUP
state BACKUP
# 指定HA监测网络接口,可以用ifconfig查看来决定设置哪一个
interface ens32
# 虚拟路由标识,同一个VRRP实例要使用同一个标识,主备机
virtual_router_id 80
# 因为当前环境中VRRP组播有问题,改为使用单播发送VRRP报文 如果VRRP组播没问题,以下这块的内容可以注释掉。
# 这个地方需要关注,之前未做此设置,结果主备节点互相不能发现,因此主备节点都升级成了MASTER,并且绑定了VIP
# 主节点时,内容为:
# unicast_src_ip 192.168.122.134
# 设置优先级,确保主节点的优先级高过备用节点
priority 90
# 用于设定主备节点间同步检查时间间隔
advert_int 2
# 设置主备节点间的通信验证类型及密码,同一个VRRP实例中需一致
authentication {
auth_type PASS
auth_pass wolfcode
}
# 集群资源监控,组合vrrp_script进行
track_script {
check_haproxy
}
# 设置虚拟IP地址,当keepalived状态切换为MASTER时,此IP会自动添加到系统中
# 当状态切换到BACKUP时,此IP会自动从系统中删除
# 可以通过命令ip add查看切换后的状态
virtual_ipaddress {
192.168.122.110 #虚拟ip配置完之后就用它访问
}
}
运维技术可以利用 Master 和 Backup 都可以用 技术 lvs