Nginx + Tomcat 动静分离实现负载均衡(转)
2016-03-15 20:00
567 查看
0.前期准备
使用Debian环境。安装Nginx(默认安装),一个web项目,安装tomcat(默认安装)等。1.一份Nginx.conf配置文件
2.基础讲解
现在假使有一台电脑192.168.8.203这台电脑,上面部署了Tomcat,里面8080端口有J2EE的服务,通过浏览器可以正常浏览网页。现在有一个问题tomcat是一个比较全面的web容器,对静态网页的处理,应该是比较费资源的,特别是每次都要从磁盘读取静态页面,然后返回。这中间会消耗Tomcat的资源,可能会使那些动态页面解析性能影响。秉承Linux哲学,一个软件只做一件事的原则。Tomcat就应该只处理JSP动态页面。这里就用到以前了解的Nginx来进行反向代理。第一步代理,实现动静网页分离。这个很简单的。index index.jsp index.html index.htm index.php
具体可参考其他文章。 关键的第40行,这个是正则匹配,网上也有很多介绍。这里匹配我项目中用到的所有静态网页后缀。第41行是代理地址。这里我代理到我的web应用中。expires 30d缓存为30天,这里的缓存是对应到前端页面,用户的Cache-Control字段,
第44行中那个正则是匹配无后缀的页面。我项目中jsp页面是无后缀的。这里可以根据需要进行修改。同样代理到192.168.8.203:8080这里。到这里你可能会问,我艹,这有毛意思啊?当然不是这样了。简单的实现静动分离,我们可以把第41行进行修改,改为
如果单纯这样的话,我们会发现页面直接传输过于占用带宽。对应web的优化,这里想到的是通过对页面进行gzip压缩,然后传到用户那里,再解压,这样可以有效的减少带宽。这里就会用到Nginx 的gzip模块了。默认的Nginx是集成有gzip模块的。只需在http段增加下面配置即可。
不要在意请求数不一样,那两个请求是谷歌插件来的。不用觉得我在骗你。
作为假使有很多人访问的网站来说,缓存肯定是很重要的东西了。一开始是想通过插件,让Nginx和Redis进行合成,然后Nginx使用Redis来缓存的,但是发现配置起来很麻烦,还要自己下载插件,重新编译Nginx,比较麻烦,所以这里觉得用Nginx自带的缓存也是不错的选择。虽然效率比不上redis,但是有还是比没有好。Nginx默认的缓存是磁盘文件系统的缓存,而不是像Redis那样的内存级别的缓存。一开始我以为Nginx就只有这样。后来查了写资料,才知道是我太天真了,对Linux不是很了解导致的。Linux的一切皆文件。原来我们可以把文件缓存到内存对应的Linux文件系统中。我说的可能比较难以理解,请自行搜索/dev/shm 这个文件目录。我们把文件缓存到这个文件目录里,其实就相当与内存的缓存了。只不过还是靠文件系统管理。所以比不上自定义格式的Redis那样的内存缓存。
在http段进行基本配置
我们rm -rf /dev/shm/JieLiERP/proxy_* 下面的所有文件(注意这里如果是进行多次测试的话要nginx -s reload 重新读取配置或重启服务,因为你rm -rf只是删除了缓存文件,但是缓存的结构信息还在nginx进程里面,结构还在,如果不重启的话,是会出现访问不到的)
所以要记得重启哦。下面是运行效果
第一次访问
第二次访问,在浏览器中Ctrl+Shift+R 强制刷新
到这里就可以看到效果了。我们查看一下/dev/shm这个里面
到这里已经快结束了。最后也是比较关键的一个技术点,就是集群,集群,集群。这个就要用到upstream了,看到最开头的配置文件了吗,就是那个
到这里就结束了。把上面各个部分根据自己需求配置起来就可以实现单机房负载均衡了。 上面这种做法有一个缺点就是在前面的那一台nginx如果当机,后面所以机器就失去了被访问的能力了,所以需要在前面实现多个nginx多机房的负载。关于这个就是另外一个话题了。目前还没有研究。以后有机会再说了。
上面动态服务器组如果是那种需要保存用户状态的话,会有问题,就是session问题,比如我在server1进行登录后,下一次动态服务器组进行轮询后可能分配到server2,就会造成要重新登录。治标的办法是,配置轮询规则,根据用户请求的IP进行Hash,然后分配对应的服务器。具体配置如下:
参考资料:
http://www.ha97.com/5194.html Nginx配置文件nginx.conf中文详解
/article/4012930.html nginx cache静态化+tmpfs 高性能cdn方案
http://www.oschina.net/question/35243_180072 Nginx配置了proxy_cache为什么不能产生缓存文件
http://www.ttlsa.com/nginx/nginx-enforce-cache/ nginx强制缓存
/article/4584145.html 解决nginx反向代理缓存不起作用的问题
http://blog.csdn.net/akon_vm/article/details/8494620 缓存nginx服务器的静态文件
/article/5479813.html 基于nginx tomcat redis分布式web应用的session共享配置
本文地址: /article/6193166.html
http://blog.jobbole.com/95376/?utm_source=hao.jobbole.com&utm_medium=relatedArticle
相关文章推荐
- Linux 安装jdk、tomcat,maven
- Tomcat源码解析(五):Connector连接器的初始化和启动流程
- mac下安装tomcat
- Linux下启动启动tomcat 服务器报错 The file is absent or does not have execute permission
- MyEclipse下Tomcat启动变慢 解决方法
- Tomcat虚拟目录配置
- Tomcat实现Session对象的持久化原理及配置方法介绍
- maven tomcat7:deploy
- java与tomcat类加载机制
- tomcat log 配置解决catalina.out文件过大问题
- tomcat catalina.out 日志分割
- tomcat虚拟目录配置方法
- Tomcat启动报Error listenerStart错误
- 动静分离—Nginx+Tomcat
- MyEclipse2014 怎么将项目部署在tomcat的ROOT目录下
- 为tomcat指定JDK
- MyEclipse 启动 Tomcat 配置容器内存分配
- Windows下的修改Tomcat的可用内存
- Tomcat 输出日志文件 catalina.out 大小控制
- Tomcat Connector三种运行模式(BIO, NIO, APR)的比较和优化