在容器化技术盛行的现在,掌握使用Docker部署项目已是必须技能,接下来记录一次使用Docker搭建Nginx并反向代理到多个Tomcat,在开始刚之前,先来补充一些关于Nginx的理论知识。(在此之前需要基础掌握Docker)
关于Nginx
我们通常使用Nginx来反向代理我们的静态资源和各种web服务,当然它也具有邮件服务等功能,不过那部分本人少用,在这里就不做阐述。
配置文件解析:
nginx.conf主要分为3大模块:配置块,events块,http块(server块),其中http块是我们经常需要配置的地方。
worker_process:设置worker的数量,一个woker使用一个进程,由于nginx和redis都是使用了io多路复用的原则,这里最好设置为和CPU相同的数量,ps:如果是在windows下,则没有效果,所以nginx和redis最好是部署在Linux环境下。
worker_connection:最大连接数量。一个http请求可能会有2个或者4个连接。如果是静态资源,就是两个连接,如果是动态,则会有4个连接。
问题延伸:nginx支持的最大并发数:如果是静态资源,最大并发数=worker_process*worker_connetction/2;如果是动态,最大并发数=worker_process*worker_connetction/4
1.反向代理
通过Nginx可以反向带来到我们的web服务。
2.负载均衡
2.1 Nginx分配服务器的策略
①轮询(默认):每个请求按时间顺讯逐一分配到不同的后端服务器,如果后端服务器宕掉,可以自动剔除。
②weight(权重):默认的权重为1,权重越高的服务端被分配的请求越多。相当于指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
upsrteam myserver { server 127.0.0.1:8081 weight=1; server 127.0.0.1:8082 weight=2; }
③ip_hash:每个请求按访问ip的hash结果分配,保证每个客户端固定访问一个后端服务器,可以解决session的问题。
upsrteam myserver { ip_hash; server 127.0.0.1:8081 ; server 127.0.0.1:8082 ; }
④fair(第三方):按后端服务器的响应时间来分配请求,响应时间短的优先。
upsrteam myserver { server 127.0.0.1:8081; server 127.0.0.1:8082; fair; }
⑤url_hash(第三方):按访问url的hash值来分配请求,保证相同的请求都是请求的同一台服务器,一般用于缓存服务器。
upsrteam myserver { server 127.0.0.1:8081; server 127.0.0.1:8082; hash $request_uri; hash_method crc32; }
3.动静分离
使用Nginx来实现动静分离不是单纯把动态页面和静态页面进行物理分离,而是把动态请求和静态请求分开,可以理解为使用Nginx处理静态页面,Tomcat处理动态页面。
目前主流的两种动静分离方案有两种:
①纯粹把静态文件独立成单独的域名,放在服务器上,这也是主流推荐的方案。
②动态和静态文件混合在一起发布,通过nginx来分开。
通过location指定不同的后缀名实现不同的请求转发。通过expires参数设置,可以是浏览器缓存过期时间,减少与服务器之间的请求。具体expires定义:给一个资源设定一个过期时间,该时间内对该资源的请求不用去服务器重新下载,只需要在浏览器确认过期时间即可,推荐设置为3d,也就是3天,3天内对该资源的请求,会发送请求比对服务器文件最后更新时间有没有变化,没有变化则返回304,代表该资源来自浏览器缓存,有修改则返回200,从服务器下载。
location /image/ { root /data/; #静态图片资源所在的上级目录,例如 /data/image/1.jpg autoindex on; #可以看到文件目录 expires 3d; #使用浏览器缓存3天 }
4.高可用集群
场景:只有一个Nginx,并且该服务器宕机了,导致全部服务器不可用。使用nginx+keepalived。
原文链接:https://blog.csdn.net/huanglifu520/article/details/105280772