1. nginx的核心功能
1.1 nginx反向代理功能
正向代理
Nginx 不仅可以做反向代理,实现负载均衡。还能用作正向代理来进行上网等功能。 正向代理:如果把局域网外的 Internet 想象成一个巨大的资源库,则局域网中的客户端要访 问 Internet,则需要通过代理服务器来访问,这种代理服务就称为正向代理。
简单一点:通过代理服务器来访问服务器的过程 就叫 正向代理。
需要在客户端配置代理服务器进行指定网站访问代理的为客户端,对于服务器不知道真实客户的信息。例如:翻墙软件。
反向代理服务器
反向代理,其实客户端对代理是无感知的,因为客户端不需要任何配置就可以访问。
我们只 需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返 回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器 地址,隐藏了真实服务器 IP 地址。代理的为服务器端。对于客户来说不知道服务器的信息。例如: nginx
项目部署图
准备web项目---188。
准备nginx----132
启动web项目
配置nginx
server {
listen 82;
server_name localhost;
location /{
# 代理的服务器地址
proxy_pass http://192.168.111.132:8080;
}
}
启动nginx
./usr/nginx/sbin/nginx
1.2 nginx的负载均衡
负载均衡(Load Balance [4])其意思就是把请求分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。
web项目必须搭建的为集群模式。
web服务器项目至少搭建2台以上。192.168.111.132 8081 8082
nginx服务器
运行两个web工程项目
springboot项目
运行java的项目 java -jar xxx.jar
注意: 端口号别忘记放行
配置nginx完成负载均衡
重新加载nginx配置
/usr/nginx/sbin/nginx -s reload
测试
http://192.168.111.188:83/getInfo
负载均衡的策略
默认为轮询。
权重策略: 服务器硬件配置不同时。
ip_hash策略: 根据访问者客户的ip固定访问对应的web服务器。
花钱买第三方策略插件:
1.3 nginx动静分离
动:动态资源[接口] 静:静态资源 [css js image]。
分离: 之前我们把静态资源和动态资源全部放在web服务器下。 把静态资源放入nginx服务器下。动态资源web服务器下。
准备web项目
把静态资源放到nginx中
放在nginx安装目录
配置nginx
测试
. http://192.168.111.188:84/main
2. nginx的HA高可用的搭建
2.1 高可用的原理--keepalived
2.2 搭建ha高可用
安装keepalived
yum install -y keepalived
默认安装在/etc/keepalived下
修改keepalived.conf配置文件
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
# ip的地址
smtp_ server 192.168.100.104
smtp_connect_timeout 30
router_id 192.168.100.104
}
# 执行脚本
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 1
authentication {
auth type PASS
auth pass 1111
}
virtual_ipaddress {
192.168.100.50 # 虚拟ip. 使用逗号隔开
}
track_script {
chk_http_port # 追踪nginx脚本
}
从节点
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
# ip的地址
smtp_ server 192.168.111.189
smtp_connect_timeout 30
router_id 192.168.111.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 1
authentication {
auth type PASS
auth pass 1111
}
virtual_ipaddress {
192.168.111.50 # 虚拟ip. 使用逗号隔开
}
track_script {
chk_http_port # 追踪nginx脚本
}
}
nginx_check.sh
#!/bin/bash
# 检查是否开启nginx---统计nginx进程的个数
A=`ps -C nginx --no-header |wc -l`
if [ $A -eq 0 ];then
pkill -9 keepalived
fi
启动
nginx
keepalived systemctl start|stop keepalived
4. 最终测试
a)在浏览器地址栏输入 虚拟 ip 地址 192.168.17.50