用nginx和resin来实现动静分离

http://blog.iamzsx.me/show.html?id=111001


nginx ("engine x") 是一个高性能的HTTP和反向代理服务器。

nginx有出色的处理静态页面的能力。但是对于一个大型网站来说,必然存在大量的动态页面。而静态页面和动态页面所要求的资源是不一样的。

下面我们就使用nginx来配置对动态页面的反向代理。这样子,我们就可以让一台nginx处理静态页面,而后端架上N台(视负载情况)来处理动态页面,从而达到动态和静态效率的均衡

安装nginx

安装过程很简单,到http://www.nginx.org/下载最新版,然后解压,./configure;make;make install就好啦。

默认安装到/usr/local/nginx目录下。

安装resin

Resin是CAUCHO公司的产品,是一个非常流行的application server,对servlet和JSP提供了良好的支持,性能也比较优良,resin自身采用JAVA语言开发。

所以你需要在你的机器上安装JDK。记得设置JAVA_HOME环境变量。

然后到http://www.caucho.com/下载最新版的resin,解压后就可以使用了,不需要安装。

配置nginx

打开conf/nginx.conf。加上下面的配置(至于加的位置,你会看到很多的location,跟他们并列就ok啦)

 

location ~ \.jsp$ {
            proxy_pass   http://backend;
            proxy_set_header X-Real-IP $remote_addr;
        }
 

 

~表示使用正则表达式,\.jsp$表示以.jsp结尾的链接(不考虑get参数),你可以自己配置你的动态页面的链接的正则表达式。因此,设计动态页面的URL时最好有些规律,方便使用负载均衡。

proxy_pass表示代理服务器的位置,也就是请求要转发到什么地方,这里的backend是一个自己起的名称,后面解释。

proxy_set_header X-Real-IP $remote_addr;表示在http头加上请求的IP地址,需要这个的原因是请求转发到resin后,resin只能看到nginx的IP,看不到用户的真正IP,设置之后,在resin中就可以通过http头的X-Real-IP来获取用户的真正IP了。

然后把配置文件拉到最后面,在最后一个"}"的上面加上

 

   upstream backend {
            server 127.0.0.1:8080;
            server 127.0.0.1:8080;
    }
 

 

这里的backend就是我们上面提到的backend,这个表示说backend代表了两个server,把你的所有的resin的地址和端口加到这里吧(这里我为了简单实验,设成了同一个)。

ok,然后保存后运行sbin/nginx启动nginx。

配置resin

其实resin什么都不用配置。我们写一个简单的test.jsp放到webapps/ROOT目录下

01<% @page import="java.util.*" %>
02<html>
03<head><title>test</title></head>
04<body>
05<table>
06<tbody>
07<%
08Enumeration e = request.getHeaderNames();
09while(e.hasMoreElements()) {
10        out.print("<tr>");
11        String header = (String)e.nextElement();
12        out.print("<td>" + header + "</td><td>" + request.getHeader(header) + "</td>");
13        out.print("</tr>");
14}
15out.print("<tr><td>Your IP</td><td>" + request.getRemoteAddr() + "</td></tr>");
16%>
17</tbody>
18</table>
19</body>
20</html>

然后运行./bin/resin.sh start启动resin。这个test.jsp主要是打印出http头以及用户的ip。

接下来在浏览器输入http://172.31.5.121/test.jsp(这个是我自己的实验机器的IP),可以看到下面的内容。

 

X-Real-IP172.31.200.84
Hostbackend
Connectionclose
User-AgentMozilla/5.0 (Windows NT 6.1) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.122 Safari/534.30
Accepttext/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encodinggzip,deflate,sdch
Accept-Languagezh-CN,zh;q=0.8
Accept-CharsetGBK,utf-8;q=0.7,*;q=0.3
CookieJSESSIONID=aaa1jSMgPYTG_fVJhtsft
Your IP127.0.0.1

 

看到了吗?用户IP地址是127.0.0.1。而真正的IP应该是X-Real-IP172.31.200.84。

因此,我们写的网站如果用到了用户的IP,应该考虑使用反向代理的特殊情形。


附上一些nginx配置小提示:

worker_processes一般跟CPU核数一致,也就是让一个CPU运行一个进程。

worker_connections要小于worker_rlimit_nofile  

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值