1. Nginx的核心功能
1.1 nginx反向代理功能
正向代理
代理的为客户端,对于服务器不知道真实客户的信息。例如:翻墙软件
反向代理服务器
代理的为服务器端。对于客户来说不知道服务器的信息。例如:nginx
项目部署图
web项目部署的虚拟机和Nginx的虚拟机可以为两台服务器【也可以在同一台虚拟机上】,且网络连接要保持一致,桥接网络无法访问NAT网络
若Nginx部署在桥接网络模式的虚拟机上,web项目部署在NAT网络模式的虚拟机上,此时,通过访问桥接模式的虚拟机的ip无法访问web项目
若二者均部署在NAT网络模式的虚拟机上,就可以成功访问
因为不在同一个网段
反向代理步骤
-
配置Nginx
server {listen 82;server_name localhost;location /{# 代理的服务器地址proxy_pass http://192.168.111.XXX:8080;}}
配置文件在/usr/nginx/conf目录下——nginx.conf文件
-
防火墙放行对应的端口号
firewall-cmd --add-port=82/tcp --zone=public --permanent
-
重启防火墙
systemctl restart firewalld
-
启动Nginx
./usr/nginx/sbin/nginx
-
访问时输入nginx的地址和端口
1.2 nginx的负载均衡
负载均衡(Load Balance):把请求分摊到多个操作单元上进行执行,例如Web服务、FTP服务器、企业关键应用服务器和其他关键任务服务器等,从而共同完成工作任务
web项目必须搭建集群模式
web服务器项目至少搭建2台以上才可以达到集群模式
运行springboot项目
- 运行springboot项目
java -jar xxx.jar
注意:端口号要放行,放行后要重启防火墙
配置nginx完成负载均衡
#定义集群名称
upstream lay{#真实web服务器集群信息server ip:端口号;server ip:端口号;
}
server{listen 83;#监听的端口号server_name localhost;location /{proxy_pass http://lay;#集群名称}
}
重新加载nginx配置
/usr/nginx/sbin/nginx -s reload
测试
http://ip:端口号/资源
1.3 负载均衡的策略
默认为轮询
权重策略:服务器硬件配置不同时
#定义集群名称 upstream lay{#真实web服务器集群信息,weight的值越大权重越大,访问频率越高server ip:端口号 weight=权值1;server ip:端口号 weight=权值2; } server{listen 83;#监听的端口号server_name localhost;location /{proxy_pass http://lay;#集群名称} }
weight的值越大权重越大,访问频率越高
- ip_hash策略:根据访问者客户的ip固定访问对应的web服务器
#定义集群名称 upstream lay{#真实web服务器集群信息server ip:端口号;server ip:端口号;ip_hash; } server{listen 83;#监听的端口号server_name localhost;location /{proxy_pass http://lay;#集群名称} }
ip_hash;
- 花钱买第三方策略插件
1.4 nginx动静分离
动:动态资源【接口】
静:静态资源【css、js、image】
分离:之前我们把静态资源和动态资源全部放在web服务器下。现在把静态资源放入nginx服务器下。动态资源在web服务器下
步骤:
-
准备web项目
-
把静态资源放到nginx中
放在nginx安装目录的创建的static目录中
-
配置nginx
server{listen 84;server_name localhost;location /{proxy_pass http://ip:端口号;}#以 下面的内容 结尾location ~ \.js|.css|.jpg|.png|.jpeg|.gif|.ico|.mp3|.mp4|.avi${root static;#static中包含静态资源} }
1.5 nginx的HA高可用的搭建
1.5.1 高可用的原理–keepalived
- nginx如果宕机,导致客户无法访问项目。解决:搭建nginx的高可用
- 如果nginx主节点宕机,,如果切换到从节点【自动】
- 客户难道要记住两个nginx服务器的ip吗?不可能。
2和3的问题,通过keepalived组件解决
1.5.2 搭建HA高可用
安装keepalived
yum install -y keepalived
默认安装在/etc/keepalived
修改keepalived.conf配置文件
主机点
global_defs {notification_email {acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from Alexandre.Cassen@firewall.loc# ip的地址smtp_ server 虚拟机的ipsmtp_connect_timeout 30router_id 虚拟机ip
}
# 执行脚本
vrrp_script chk_http_port {script "/usr/local/src/nginx_check.sh"interval 2 # 每2s执行一次该脚本weight -20 # keepalive宕机 权重-20 优先级
}vrrp_instance VI_1 {state MASTER # 角色interface ens33 # 网卡名virtual_router_id 51 # id 保证主从相同priority 100 # 优先级 主节点大于从节点advert_int 1authentication {auth type PASSauth pass 1111}virtual_ipaddress { ip50 # 虚拟ip. 使用逗号隔开}track_script {chk_http_port # 追踪nginx脚本}
}
从节点
global_defs {notification_email {acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from Alexandre.Cassen@firewall.loc# ip的地址smtp_ server 虚拟机的ipsmtp_connect_timeout 30router_id 虚拟机ip
}
# 执行脚本
vrrp_script chk_http_port {script "/usr/local/src/nginx_check.sh"interval 2 # 每2s执行一次该脚本weight -20 # keepalive宕机 权重-20 优先级
}vrrp_instance VI_1 {state MASTER # 角色interface ens33 # 网卡名virtual_router_id 51 # id 保证主从相同priority 100 # 优先级 主节点大于从节点advert_int 1authentication {auth type PASSauth pass 1111}virtual_ipaddress { ip50 # 虚拟ip. 使用逗号隔开}track_script {chk_http_port # 追踪nginx脚本}
}
nginx_check.sh脚本文件
该脚本文件可以放在/usr/local/src目录下
#!/bin/bash
# 检查是否开启nginx---统计nginx进程的个数
A=`ps -C nginx --no-header |wc -l`
if [ $A -eq 0 ];thenpkill -9 keepalived
fi
详细脚本
A=`ps -C nginx --no-header |wc -l`
if [ $A -eq 0 ];then #如果nginx没有启动就启动nginx /app/nginx/sbin/nginx #重启nginxif [ `ps -C nginx --no-header |wc -l` -eq 0 ];then #nginx重启失败,则停掉keepalived服务,进行VIP转移pkill keepalived fi
fi
修改权限:chmod 777 nginx_check.sh
使其成功启动
启动
nginx //nginx的启动命令
keepalived的启动命令:
systemctl start|stop keepalived