1. nginx的核心功能
1.1 nginx反向代理功能
正向代理
代理的为客户端,对于服务器不知道真实客户的信息。例如:翻墙软件。
反向代理
反向代理(Reverse Proxy)是一种服务器配置,它位于客户端和服务器之间,充当客户端请求的接收者和服务器响应的转发者。代理的为服务器端。对于客户来说不知道服务器的信息。例如: nginx
使用nginx反向代理
1. 修改nginx配置文件nginx.conf
2.启动nginx
/usr/nginx/sbin/nginx
3. 测试
需要放行端口号
1.2 nginx的负载均衡
负载均衡(Load Balance [4])其意思就是把请求分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。
web项目必须搭建的为集群模式。
配置nginx完成负载均衡
1. 开启项目修改配置
web服务器项目至少搭建2台以上。192.168.138.188 8081 8082
nginx服务器
运行两个web工程项目
springboot项目
启动jar项目
java -jar xxx.jar
放行端口号
重新加载nginx配置
/usr/nginx/sbin/nginx -s reload
测试
运行192.168.138.188:83可以进入部署的两个项目,默认是轮询模式
负载均衡的策略
默认为轮询。
#定义集群名称upstream qy174{#真实web服务器集群的信息(轮询)#server 172.16.7.110:8081;#server 172.16.7.151:8082;}
权重策略: 服务器硬件配置不同时。
#定义集群名称upstream qy174{#权重策略 weight后的值是权重,权重越大访问频率越高server 172.16.7.110:8081 weight=2;server 172.16.7.151:8082 weight=1;}
ip_hash策略: 根据访问者客户的ip固定访问对应的web服务器。
#定义集群名称upstream qy174{#真实web服务器集群的信息(轮询)#server 172.16.7.110:8081;#server 172.16.7.151:8082;ip_hash;}
花钱买第三方策略插件:
1.3 nginx动静分离
动:动态资源[接口] 静:静态资源 [css js image]。
分离: 之前我们把静态资源和动态资源全部放在web服务器下。 把静态资源放入nginx服务器下。动态资源web服务器下。
把静态资源放到nginx中
放在nginx安装目录
配置nginx
server {listen 82;server_name localhost; location /{proxy_pass http://192.168.138.188:8080;}#静态资源部署location ~ \.js|.css|.jpg$ {root static;}}
2. nginx的HA高可用的搭建
2.1 高可用的原理–keepalived
我们部署项目后开启nginx进行反向代理,如果只准备一个nginx,那么如果nginx宕机了,会导致用户无法访问项目,因此我们需要搭建nginx的高可用(即多部署几台nginx)。怎么做到当一个nginx宕机会自动切换到其他nginx,通过一个ip访问多台nginx的服务器ip,需要使用keepalived组件
2.2 搭建ha高可用
1. 安装keepalived
yum install -y keepalived
默认安装在/etc/keepalived下
2. 修改keepalived.conf配置文件
主节点
global_defs {notification_email {acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from Alexandre.Cassen@firewall.loc# ip的地址 这是nginx的IP地址smtp_ server 192.168.138.188smtp_connect_timeout 30router_id 192.168.138.188
}
# 执行脚本
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 { 192.168.138.50 # 虚拟ip. 使用逗号隔开 访问的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 192.168.138.189smtp_connect_timeout 30router_id 192.168.138.189
}
# 执行脚本
vrrp_script chk_http_port {script "/usr/local/src/nginx_check.sh"interval 2 # 每2s执行一次该脚本weight -20 # keepalive宕机 权重-20 优先级
}vrrp_instance VI_1 {state BACKUP # 角色interface ens33 # 网卡名virtual_router_id 51 # id 保证主从相同priority 90 # 优先级 主节点大于从节点advert_int 1authentication {auth type PASSauth pass 1111}virtual_ipaddress { 192.168.138.50 # 虚拟ip. 使用逗号隔开}track_script {chk_http_port # 追踪nginx脚本}
}
3. 编辑脚本
/usr/local/src/nginx_check.sh(路径是keepalived.conf配置文件中配置的执行脚本)
下面两个脚本任选一个就行
#!/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
4. 修改权限
#进入文件所在目录下
cd /usr/local/src
#修改权限
chmod 777 nginx_check.sh
5. 测试
#启动nginx
/usr/nginx/sbin/nginx
#启动keepalived
systemctl start|stop keepalived