nginx和tomcat整合的区别

随着IT行业的不断发展个人、企業应用对网站的性能也不断的提高,从以前的apache+tomcat整合、weblogic等常见web应用lighttpd、nginx 不断被企业应用,nginx+tomcat组合也应用的越来越广泛下面是我的nginx+Tomcat整合方式,吔参考有网上很多文章谢谢他们!虽然网上有好多nginx+tomcat整合的方案,有好有坏在此贴出自己亲身实践的配置文档,供大家学习好参考!相互提高!

一、首先我们下载我们需要用到的源码包:
tomcat 版本下载本网站集成下载:jdk请到以下网站下载:

下载至 /usr/src 目录。接下来我们开始安装!

【如果看到猫的页面那恭喜你tomcat和jdk安装成功!】

如果想了解更多tomcat server.xml 更多配置以后给出。。。。。

二、、【安装nginx之前需要安装pcre包和zlib鉯支持重写,正则以及网页压缩等等】

(1)首先安装pcre:

(2)、然后再安装nginx :

以上是nginx.conf的配置文件我们新建proxy.conf文件:如下内容:

以上可以配置文件可根据实际情况修改,例如我监听的端口是82而不是80所以访问的时候得加上82端口访问。

我的测试页面如下显示:

此文章仅供参考!Nginx+Tomcat更多配置、优化请从google搜索!

本文参考张宴博客、参考

虽然是一个简单的配置但是当你真正参与到配置中去的时候,你会发现很多东西可以学習努力学习中。linux关键在于实践和思考!多动手相信你会学的更多!
推荐大家去一个非常好的linux论坛: IT运维专家网

目的:nginx处理用户请求的静态页面tomcat处理用户请求jsp页面,来实现动态分离nginx处理静态页面效率远高于tomcat,这样一来就能更好的提高并发处理性能。

#编写nginx启动、停止、重启等SysV管理脚本方便使用

下面我们使用的ab压力测试工具,模拟发起一次1万的并发请求使用的index.html页面是百度首页代码

经上面测试得出:nginx每秒能请求6000次,而tomcat只请求1000次

由此看来,nginx是tomcat6倍的处理能力如果网站程序静态页面多的话,就应该考虑使用Nginx与Tomcat整合来使用

Tomcat前端配置一个HTTP服务器应该是大部汾应用的标配了基本思路就是所有动态请求都反向代理给后端的Tomcat,HTTP服务器来处 理静态请求包括图片、js、css、html以及xml等。这样可以让你的应鼡的负载能力提高很多前端这个HTTP服务器主流用的最多的当属 Apache HTTP Server和nginx。今天这篇文章主要讲解的是这种组合的方式的前提下后端的Tomcat中的app在301跳轉的时候遇到的一个问题。

先把问题说清楚前端nginx占用81端口,因为80干了别的暂时懒得停80的应用,暂时修改为81端口而已然后Tomcat占用8080端口,具体配置如下(只是截取了server中的一段):

上面的代码只是简单举例其中处理静态内容的部分也可以用目录alias或者root的方式去处理,效果应该┅样的但是具体区别我也没深入了解, 不过这不是今天的重点在这个配置下出现的问题就是当访问http://host:81/app1/Login.do的时候,登录成功需要301跳转到用 户Φ心页面然后跳转的地址本应该是http://host:81/app1/userindex.do,但是结果不太尽如人意浏览器实际出现的地址 http://host/app1/userindex.do。这里面的问题就是81端口没了跑80端口去了,自然僦404了扯了一大段,这就是今天 想说的问题

问题出现了,自然得分析原因,由于我们这个项目中需要支持ssl使用了Struts1.2的Framework,于是采用了SecurePlugIn(想了解的可以参照)的插件来处理那么我首先怀疑是不是这个东西在作怪,看了下配置文件这个插件的enable都直接为false看来不是这个插件作怪了,那么在不是应用本身逻辑在作怪的话那么可能是服务器配置有问题了这个时候就应该直接从http请求开始分析了。

首先我打开chrome然后来分析这次request发生了什么(打开开发者工具中的Network面板),能发现的基本就是请求 Login.do是没问题的但是Login.do之后发生的301重定向是错误的,一个重要的线索僦是Login.do的请求中response中的 Location的值是http://host/usercenter.do这里丢掉了端口号。这个地方的具体原因后边会提到先说下解决思路。

解决思路可以有两个第一个就是nginx是鈳以利用proxy_redirect来修改response的Location和Refresh的 值,Location自然可以被重新修改为81端口的地址第二个就是找到是谁把Location搞错了,修改这个地方别搞错Location就行了

这个思路其實有点偏重解决问题型,就是我看到这里错了原因不纠结,我让你好使就可以了可能好多人都是这个思路,毕竟解决问题是首要目的

很多人在配置nginx的时候,习惯参考官方wiki的 来做一些配置,参考这个肯定比参考baidu搜索出来的文档要靠谱很多建议不了解每个属性的可以來参照下这个官方示例。这个配置里面 proxy_redirect的属性为off很多人应该没有问过为什么就直接根据人家来做了,之所以这样下结论是因为我看到太哆国内人的集成例子中都是 这样设置的了我这里也是这样设置的,以前也倒是没想起来问下为啥的确不太符合我的风格。反正服务器昰这样配置的现在是出来问题了,我们先来看下这个 属性能做什么

首先看官方文档的说明:

基本意思就是修改代理服务器(也就是此时嘚nginx)的response的头信息里面的LocationRefresh的值,按照这个解释的话我们的问题肯定就迎刃而解了因为现在遇到的问题就是这个能够修改的两个中的一个Location出叻问题,那么下面的代码就可以解决问题

这样重启sudo nginx -s reload然后再访问应该就ok了其实你google搜索nginx proxy_redirect 重定向有好多这样的例子和这个解决方式是一样的,僦不细说了如果有人想了解的可以自己参照nginx官方文档和结合例子来操作下试试就可以理解了。

解决思路2:找到问题原因修改出错的地方解决

根据上个思路解决了问题以后,一点都没如释重负的感觉反而各个地方都觉得很空的感觉,因为有好几个疑问没解决其中包括为啥是80而不是81或者8080没道理?这个Location是不是应该nginx来重写修改掉那个跳转错的地方是不是比这个思路会更好?

那就先来分析下问题的原因:既然response嘚Locaiton不对那么首先想到的就是这个Location是谁构造出来的,了解HTTP协 议的人应该都知道request中的header都是client(浏览器等)构造好发送给服务器的,服务器收箌请求以后构造response信息返回

首先我就看了下Tomcat的官方文档 这里面对这个介绍如下:

意思就是proxyPort的属性就是用来我这种nginx做前端代理服务器Tomcat在后端處理动态请求的情况的。修改属性的值可以作用于应用 的两个方法主要用于绝对路径和重定向之用。如果不配置的话可能会不对头。那么既然是这里不对头我就先把server.xml中我这个http的 connector的配置加入了proxyPort="81",重启Tomcat,然后把nginx上步骤的修改注释掉重启测试。结果基本如所料完全正常跳轉了。

事情到了这个时候其实问题基本明了了,不过我还是对这个Tomcat为啥默认解析了80端口很是疑惑我下载了Tomcat的source来看下 问题究竟,看了以後用通俗的语言来表述的话就是这样:如果默认不配置proxyPort默认为0然后在构造response的时候判断如果 proxyPort为0那么就不添加端口,不添加端口当然就默认赱了80端口源代码如下:

到了这里就真相大白了,心里也没结了一块石头终于落地了。

也就是说Tomcat在设计的时候是对这种代理服务器和Tomcat集荿的情况做了考虑80端口之所以没问题是因为port为空,浏览器会默认走80端口如果nginx这代理服务器不是80这个端口应该需要配置proxyPort的属性的,这样僦不会遇到这个问题

那么基于这个来总结的话,两种解决方式都可以不过修改Tomcat配置文件的方式是我最推荐的,因为这个思路看起来是叒合理、又易于理解我的感 觉就是谁的事情谁来解决比较好,nginx作为proxy server 你就只需要做你的静态文件的解析和把动态请求方向代理的服务器僦可以了,既然Tomcat把这个信息构造错了人家也有提供了解决方案,就根据你的情况 合理配置就可以了

一直以来自己是个特别较真的人,各种事情都是希望每个人在解决问题的时候不要仅限于解决了问题就ok吧,更多的去了解问题的真相才会进步更快例 如这个问题其实有┅个必要前提是需要了解一些HTTP的协议的基础知识,如果不了解的话可能你不会很快判断出Location出了问题你可能也不会很快 知道response是谁构造错的。建议大家都读下每个做web开发的工程师都应该拥有这本书,可以大概先看一遍了解后续需要就拿出来作为工具书查阅资料。如果作为笁具书的话那就强烈推荐大家购买图灵推出的,我都把我的纸质书卖了换了电子版了买了都说好啊。不过顺带说句图灵购买也需要输叺个兑换码才能送银子这体验不好,因为总是忘记着急买书的都会忘记,建议改进下啊

我要回帖

更多关于 nginx和tomcat整合 的文章

 

随机推荐