简单东西-Nginx实现Tomcat负载均衡

来源:互联网 发布:win7定时开关机软件 编辑:程序博客网 时间:2024/06/05 09:48

基本概念

百度百科上定义Nginx是这样的:

Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。由俄罗斯的程序设计师Igor Sysoev所开发,供俄国大型的入口网站及搜索引擎Rambler(俄文:Рамблер)使用。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。

今天用 Nginx和Tomcat实现了一个简单的负载均衡的例子,记录如下。

准备Tomcat应用

前两天整理websocket时用的一个简单项目,修改server.xml中的端口为8080,启动tomcat,JSP页面引用jquery1.9。现在验证下这个静态资源请求分发的情况。

    <script type="text/javascript" src="/jquery1.9.0.js"></script>    <script type="text/javascript">

直接访问tomcat请求,由于项目路径中没有该文件,所以报404错误:
这里写图片描述

添加配置

使用Nginx实现Tomcat请求的动静资源分离,在nginx安装目录下的html中放入jquery1.9这个文件:
这里写图片描述

修改nginx.conf,在http节点中添加如下配置:

   upstream local_tomcat {       server localhost:8080;    }     server {        listen       80;    server_name  localhost;        location / {            root   html;            index  index.html index.htm;        }    # 所有静态请求都由nginx处理,存放目录为html    location ~ \.(gif|jpg|jpeg|png|bmp|swf)$ {        root    html;    }    # 所有动态请求都转发给tomcat处理    location ~ \.(jsp|do)$ {        proxy_pass  http://local_tomcat;    }        error_page   500 502 503 504  /50x.html;        location = /50x.html {            root   html;        }    }

从Nginx服务器的响应行为来看,这个配置文件就是配置Nginx请求处理规则的,Server定义的是Nginx服务器的信息,它监听80端口和443端。对80端口的情况是这样的:

upstream 负载均衡模块,配置主机列表
location / :所有的/请求最终转发到根目录下的index.html文件
location ~ .(jsp|do) 转发到http://local_tomcat目录(这里的local_tomcat就是upstream这个配置里面的名称local_tomcat。
location ~ .(gif|jpg|jpeg|png|bmp|swf) 所有的静态资源文件都转发到根目录html目录下。

进入Nginx目录,启动它:start nginx,访问主页面http://localhost/进入主页面:
这里写图片描述
再次通过Nginx访问tomcat应用:
这里写图片描述

此时这个jquery文件的请求是先被Nginx服务器解析的,所以能正确访问到。

启示录

上周六参加的那个架构大会,好几位讲师的PPT框架中的负载均衡实现方式中都有Haproxy和Nginx,以前也听过Nginx服务器,但是没有深入了解过,所以就有了本文的实验操作。
没有系统地看过它的资料,单就从实验过程来看,还是能总结一点编程注意事项的。例如:如果要结合Nginx使用,实现Tomcat动、静资源分离功能,那么在开发过程中就需要统一所有的静态资源的路径,否则就容易出现404错误。
此外Tomcat可以在server.xml中配置docBase将所有的静态资源统一放在web工程目录之外。

<Context docBase="D:\WoodWang\JavaSoft\nginx-1.12.0\html" path="/" reloadable="true" />

加上这行配置之后,直接访问http://localhost:8080/websocketDemo/index.jsp也不会报错。

原创粉丝点击