Nginx(反向代理/负载均衡)
2021-03-02 21:53:10 2 举报
AI智能生成
Nginx(反向代理/负载均衡)
作者其他创作
大纲/内容
特点
nginx是什么
一个高性能的反向代理服务器
为什么性能高?
采用异步非阻塞事件处理机制:运用了epoll模型
原理
首先客户端发送请求到nginx的master(相当于管理员),master得到任务后通知
下面的worker,worker通过争抢机制得到任务后通过反向代理Tomcat来完成操作
下面的worker,worker通过争抢机制得到任务后通过反向代理Tomcat来完成操作
nginx配置文件有哪些属性模块?
全局块
比如worker进程的数量:worker_processes
events块
比如每个worker支持的最大连接数
http块
http全局块
server块
server全局块
location块
location...
server...
为什么要用nginx?
配置简单、占用内存少,并发能力强
支持反向代理、负载均衡、动静分离、高可用
支持Gzip压缩、稳定性高,异步接收请求
反向代理
正向代理
在客户端配置代理服务器,比如国内访问Google需要正向代理
反向代理
客户端将请求发送到反向代理服务器,由代理去选择目标服务器
作用
暴露的是代理服务器地址,隐藏了真实服务器IP地址
配置
负载均衡
策略
轮询(默认)
每个请求按照时间顺序逐一分配到不同的后端服务器
weight(权重)
默认为1,权重越高被分配的客户端越多
ip_hash(绑定IP)
每个请求按照访问ip的hash结果分配,每个访客固定一个后端服务器,不用考虑session跨越
fair(第三方插件)
按照服务器的响应时间来分配请求,响应时间短的优先分配
url_hash(第三方插件)
每个请求按照访问url的hash结果分配,使每个url定向到同一个后端服务器
least_conn
把请求转发给连接数较少的后端服务器
软负载与硬负载
软负载:基于软件形式实现的负载均衡 Nginx、Ribbon
硬负载:基于硬件基础设施实现的负载均衡 F5
动静分离
作用
将静态资源和动态资源分开到不同的服务器部署
减少不必要的请求消耗,减少请求延时,提高性能
实现方案
基于nginx实现动静分离,互联网公司很少用
因为不支持cdn内容分发
使用第三方静态资源服务器:oss对象云存储、七牛云(收费)
CDN内容分发
将静态资源缓存到全国各地节点,再遵循就近原则从而减少网络带宽
怎么做?
把静态文件放在独立的第三方服务器上
通过location正则匹配静态资源路径
=精确匹配 /通用匹配 ~区分大小写的正则匹配等
在指定的路径中放入静态资源就行了,记得重启nginx服务器:nginx -s reload
限流(nginx+lua+openResty)
正常限制访问频率(正常流量)
漏桶算法:设置用户请求的速率,多余的全部漏掉
突发限制访问频率(突发流量)
limit_req zone=zone burst=5 nodelay;
限制并发连接数
通过limit_conn设置允许的最大并发连接数
ddos攻击、黑白名单
网站跨域
产生背景
在微服务架构模式中采用前后端分离,vue项目的域名或端口号和接口项目的域名或端口号不一致造成的
如何解决
在响应头中设置允许跨域
response.setHeader("Access-Control-Allow-Origin", "*");
使用HttpClient转发,效率低
缺点:重复发送两次请求
使用 jsonp 处理,最大的缺陷只支持get请求不支持post请求
模拟脚本提交
使用Nginx配置浏览器访问的项目与接口项目的域名或端口号一致
www.lishaojie.top/vue 转发到vue项目
www.lishaojie.top/api 转发到接口项目
直接在Nginx中配置允许跨域
"Access-Control-Allow-Origin", "*"
网关中也可以配置类似与Nginx允许跨域的代码
"Access-Control-Allow-Origin", "*"
使用SpringBoot注解@CrossOrigin解决
高可用
Lvs的作用
linux的虚拟IP技术,阿里云的Lvs需要额外付费
keepalived的作用
心跳脚本检测,如果服务器宕机keepalived会自动重启脚本,如果多次重启失败发送通知到运维
Tomcat服务器宕机如何解决?
采用Tomcat集群实现故障转移,使用keepalived心跳检测,发送通知
基于keepalived的双机热备方案
一台服务器在提供服务,另一台处于备用状态
故障转移机制
服务器做集群的情况下会遇到哪些问题?
分布式session一致性
解决方案:Spring-Session框架+Redis
原理:将Session的内容缓存到Redis,可以直接采用token替代session
分布式Job幂等性
xxl-job
分布式日志采集的问题
ELK+Kafka
分布式全局ID的生成
雪花算法
nginx调优
worker_processes 工作线程数
一个master多个worker的好处?
worker数和服务器的cpu数相等是最为适宜的
work_connection 连接数
发送一个请求占用了worker多少连接数?
2个或4个
1个master4个worker,每个worker支持的最大连接数为1024,那最大并发数是多少呢?
合理设置 buffer 缓存、Timeout 超时时间、开启Gzip等
nginx配置
平滑升级
1、 编译安装新的可执行文件
2、执行 kill -usr2 旧版本 nginx 进程号
3、执行 kill -winch 旧版本 nginx主进程号
nginx 命令
nginx 停止
kill -quit 主进程号
kill -9 主进程号
kill -term 主进程号
pkill -9 nginx
service nginx stop 或者 nginx -s stop
nginx 启动
通过默认的配置文件启动 /usr/local/nginx/sbin/nginx
指定配置文件启动 /usr/local/nginx/sbin/nginx -c filepath
其他方式启动 service nginx start
nginx -?/-h 查看帮助
nginx -v 显示版本信息
nginx -V 显示版本和配置项信息
nginx -t 测试配置文件是否存在语法问题
nginx -T 测试配置文件 ,转储并退出
nginx -q 检测配制间时屏蔽非错误信息 ,只输出错误信息
nginx -s
nginx -s reopen 重新打开日志文件
nginx -s stop 快速停止Nginx ,此方法是先查看nginx 主进程号 然后再使用 kill 强制杀掉
nginx -s quit 优雅退出Nginx (推荐使用,此方法会等待Nginx 进程处理完毕再停止)
nginx -s reload 重新加载配置并且启动
nginx [-c filename] 在启动nginx 时配置制定的配置文件
nginx - p 用于设置Nginx的前缀路径
nginx -g 在配置文件之外的设置全局命令
nginx conf 配置文件
简单命令
error_log 错误日志
user 使用用户
worker_processes 工作进程数,通常是CPU 数量相等或者两倍
pid pid 问价路径
命令块
main 全局命令块
server 虚拟主机块
http 提供相关http服务相关的参数
location 在http 模块中对应一下特点的URL
proxy_pass 拦截映射路径
root
events 配置影响nginx服务器或与用户的网络连接,包括每个进程的最多连接数
mail 实现E-mail 的相关的代理共享一些配置
upstrean 配置http 负载均衡分配流量到几个应用程序服务器
变量
内置变量 这块主要用于 日志
$http_referer : 用来记录客户从哪个页面链接访问过来的
$http_user_agent :用来记录客户流量相关信息
$remote_addr 和 $http_x_forwarded_for :用来记录客户端ip 地址
$http_user : 用来记录客户端的用户名称
$request : 用来记录请求的URL 和 HTTP 协议
$status : 用来记录请求状态
$body_bytes_sent: 用来记录发送给客户端文件主体内容大小
自定义变量
字符串
ngx_str_t(len ,date)
语法 set var_name value
配置为环境变量
修改 etc/profile 文件
export PATH=$PATH:/usr/local/nginx/sbin
高并发解决方案
web项目
前端优化
采用动静分离架构模式,将静态资源存入到第三方的对象存储服务器(自带cdn加速)
对静态资源实现压缩,最好使用 .min 格式
采用nginx+lua+openresty对静态页面实现布局缓存
后端优化
使用微服务网关或者使用nginx对接口实现api限流,服务保护、黑名单和白名单等
使用Redis缓存减轻服务器访问的压力,Redis可以采用集群部署或者读写分离,提高吞吐量
使用多线程或者MQ异步处理快速相应客户请求
jvm、tomcat实现参数调优提高吞吐量,代码优化
mysql服务器实现性能优化、分表分库、读写分离
app项目
app项目属于CS架构,静态资源在打包的时候已经在安装包里了,不需要远程获取,核心在于后端优化
0 条评论
下一页