1.反向代理
1.1什么是反向代理:
正向代理:代理的是客户端,对于服务器来说,不知道客户的具体地址,比如翻墙软件,隐藏了真实的请求客户端,服务器不知道真实的客户
反向代理:代理的是服务器,对于客户端来说,不知道具体访问的哪个服务器的信息,对于真实服务器具有保护作用。
1.2如何使用反向代理:
模拟一台服务器:
一台Nginx代理服务器:
在qy168test01服务器上运行一个测试springboot的项目:
运行: java -jar qy168-nginx01-0.0.1-SNAPSHOT.jar
修改qy168中Nginx的配置文件内容
添加要代理的服务器地址
启动nginx:
如果已经启动了就重启加载配置文件:/usr/nginx/sbin/nginx -s reload
访问:
2.负载均衡
随着访问量的不断增加,一台服务器无法处理那么多的请求,这时就需要搭建服务器的集群。把请求均摊到集群的不同服务器上,需要负载均衡组件,该组件可以帮你完成把请求均摊到集群服务器。
案例:准备两台服务器,一台Nginx代理服务器
服务器:
Nginx代理:
在两台服务器上都运行项目:java -jar qy168-nginx01-0.0.1-SNAPSHOT.jar
修改nginx的配置文件,完成代理以及负载均衡:vi /usr/nginx/conf/nginx.conf
upstream:定义集群信息
执行6次:两台服务器都各执行了三次,是因为负载均衡默认采用轮询策略
负载均衡的策略:
轮询------默认,轮流循环
负载------根据服务的硬件不同,配置不同的载重
ip哈希策略------nginx会根据客户的ip进行哈希计算----根据计算结果把请求转发给对应的服务器。如果客户的ip没有变化,那么访问的服务器也不会发生变化。
3.动静分离
是将静态资源和动态资源分开,将静态资源交于nginx来处理。
不适合前后端完全分离的项目
演示:准备一台服务器和一台nginx代理服务器
服务器运行没有静态资源的工程: java -jar qy168-nginx02-0.0.1-SNAPSHOT.jar
配置监听:
运行:发现没有静态资源
将静态资源放在nginx的目录下
修改配置文件:
重启nginx:/usr/nginx/sbin/nginx -s reload
访问页面:
4.高可用
是为了提高nginx的可用性
设想假如代理服务器宕机了,那所有的客户请求就无法处理了,如果要解决这种为题,我们就要搭建多台代理服务器,就是nginx的高可用,如何知道哪台出现故障并能帮我切换到另一台服务器呢,客户又该如何访问nginx呢。
使用keepalived可以来解决上述的问题。作用备用代理服务器来监听主代理服务器,如果出现问题则切换到备用代理服务器
案例:搭建一台MASTER(主服务器),一台 BACKUP(备用服务器)
修改两个服务器的html页面分辨测试效果:
需要在MASTER和BACKUP上安装keepalived
yum -y install keepalived
默认keepalived路径 /etc/keepalived
修改keepalived配置文件
把自己window中的keepalived.conf覆盖原来的配置文件
MASTER:
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_ server 192.168.61.223
smtp_connect_timeout 30
router_id 192.168.61.223
}
vrrp_script chk_http_ port {
script "/usr/local/src/nginx_check.sh"
interval 2
weight 2
}
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth type PASS
auth pass 1111
}
virtual_ipaddress {
192.168.61.50
}
}
BACKUP:
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_ server 192.168.61.224
smtp_connect_timeout 30
router_id 192.168.61.224
}
vrrp_script chk_http_ port {
script "/usr/local/src/nginx_check.sh"
interval 2
weight 2
}
vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 51
priority 90
advert_int 1
authentication {
auth type PASS
auth pass 1111
}
virtual_ipaddress {
192.168.61.50
}
}
把nginx脚本拖到/usr/local/src
nginx_check.sh脚本 :
#!/bin/bash
# 检查是否开启nginx---统计nginx进程的个数
A=`ps -C nginx --no-header |wc -l`
if [ $A -eq 0 ];then
pkill -9 keepalived
fi
分别启动keepalived服务和nginx
启动keepalived服务:systemctl start keepalived
启动nginx:/usr/nginx/sbin/nginx
测试:
人为关闭主节点的keepalived 和nginx
访问的是备用服务器