Nginx模块化体系
![](https://i-blog.csdnimg.cn/blog_migrate/e2e7ec5c939abea9ef2ace7b9346b35d.png)
使用Nginx搭建3台Tomcat集群
大致的配置文件如下:
#配置上游服务器
upstream tomcats{
server 192.168.247.134:8080;
server 192.168.247.135:8080;
server 192.168.247.136:8080;
}
server{
listen 80;
# 访问时候通过域名访问即可,但是服务器上得加域名映射 /etc/hosts
server_name www.tomcats.com;
#配置匹配规则
location / {
proxy_pass http://tomcats;
}
}
负载均衡策略
轮询
轮询即是每一台每次都顺序访问一次,Nginx默认配置就是轮询策略;
加权轮询
权重如何去配呢?默认为1
以weight来分配权重;
upstram 指令参数
- max_conns: 限制连接的最大数值;
- down:标识服务器状态为不可用,表示服务器中的某一台服务器不可用;
server 192.168.247.137 down;
- slow_start
- backup :表示某一台备用机,如果其他服务器正常,该服务器不会被使用l
server 192.168.247.137 backup;
- max_fails: 表示失败的最大数;
- fail_timeout:表示在一个时间内失败等待的时间,不会再有请求发送到该服务器上,等时间段过后,请求会重新请求到宕机的服务器上;
使用keepalive提高吞吐量
#配置上游服务器
upstream tomcats{
server 192.168.247.134:8080 weight=1;
server 192.168.247.135:8080 weight=2;
server 192.168.247.136:8080 weight=5;
#配置长连接的数量
keepalive 32;
}
server{
listen 80;
server_name www.tomcats.com;
#^~ 以某个字符路径开头请求
location / {
proxy_pass http://tomcats;
#配合长连接数量
proxy_http_version 1.1;
proxy_set_header Connection "";
}
}
IP_Hash
根据请求的用户IP经过Hash之后分配到对应的服务器上
保证每次请求的IP能够访问到同一台服务器上;
Hash算法
Nginx设置ip_hash
#配置上游服务器
upstream tomcats{
#设置iphash
ip_hash;
server 192.168.247.134:8080;
server 192.168.247.135:8080;
server 192.168.247.136:8080;
#配置长连接的数量
keepalive 32;
}
server{
listen 80;
server_name 192.168.247.130;
#^~ 以某个字符路径开头请求
location / {
proxy_pass http://tomcats;
proxy_http_version 1.1;
proxy_set_header Connection "";
}
}
IP_Hash算法时做hash的算法是前三段的值去做的hash:192.168.247
一致性Hash算法
负载均衡的IP_Hash是简单的hash取模算法,如果固定的服务器数量变化,那么这个hash算法会重新进行Hash求模运算,这样用户在以前的服务器的会话信息会丢失,这样就引出了一致性哈希算法;
原始:
如果节点3的服务器宕机:
如果请求量过大,需要扩容机器之后:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kRCtudl3-1587484163269)(C:\Users\VLEUSCHEN\Desktop\Nginx的学习\image-20200419222133652.png)]
负载均衡之URL_HASH
负载均衡之leat_conn
根据最小连接数去请求,最终落到请求数最小的那台服务器上;
Nginx缓存
expires指令
控制浏览器缓存的过期时间
Nginx反向代理缓存
具体配置内容如下:
# 重点配置内容如下:
# proxy_cache_path 设置缓存保存的目录
# keys_zone 设置共享内存以及占用的空间大小
# max_size 设置缓存大小
# inactive 缓存超过该时间,缓存自动被清理掉
# use_temp_path 关闭临时目录
proxy_cache_path /usr/local/nginx/upstream_cache keys_zone=mycache:5m max_size=1g inactive=30s use_temp_path=off;
#配置上游服务器
upstream tomcats{
#设置iphash
#ip_hash;
server 192.168.247.134:8080;
server 192.168.247.135:8080;
server 192.168.247.136:8080;
#配置长连接的数量
keepalive 32;
}
server{
listen 80;
server_name www.tomcats.com;
# 开启并且使用缓存,名字和上面key_zone的值保持一致
proxy_cache mycache;
# 针对200和304状态码的缓存设置过期时间
proxy_cache_valid 200 304 8h;
#^~ 以某个字符路径开头请求
location / {
proxy_pass http://tomcats;
proxy_http_version 1.1;
proxy_set_header Connection "";
}
}
Nginx配置SSL证书提供Https访问
算了,我没域名,没法弄。。。
Nginx之动静分离
动静分离的特点
- 分布式:动态的Api接口和静态资源进行分开,减少后台服务器的压力,对静态资源进行缓存;
- 前后端解耦,前后端分离,前后端分开部署发布,减少运维复杂度;
- 静态资源归Nginx管理;
- 接口服务化:统一封装接口对外提供服务;
动静分离的数据指什么
- 静态数据:css/js/html/images/audios/videos…;
- 动态数据:得到的响应可能会和上一次有所不同;
动静分离的实现方式
CDN
CDN: 内容分发网络,针对静态资源的加速,拉取离用户最近机房的静态资源;
Nginx
Nginx动静分离的问题
-
跨域问题;
- Springboot
- Nginx
- Jsonp
-
分布式会话问题;
- 分布式缓存中间件Redis