Nginx作为反向代理服务器,可以对Web服务器提供加速,并且具有负载均衡的功能。
参考:http://blog.csdn.net/cclovett/article/details/26377269
本例使用Nginx在2个Tomcat做负载均衡,并做了资源分离。即静态资源(js,css,图片)给nginx,JSP等请求分发给tomcat处理。
1)Nginx的安装和启动
这里使用的Nginx版本是1.8.0,从http://nginx.org/en/download.html下载Windows版本。
下载的文件很小,只有1.22M,下载完毕将文件解压到nginx-1.8.0。我这里的目录是d:/soft/nginx-1.8.0。
可以直接双击nginx.exe来启动,或进入nginx目录,执行start nginx启动。
使用nginx -s stop来关闭nginx。
启动nginx后,访问http://localhost,出现下面的页面即表示成功。
2)Nginx负载均衡配置
主要是修改nginx.conf文件。
找到#gzip on;一行,在下面增加:
upstream local_tomcat {
server 127.0.0.1:8081 weight=1;
server 127.0.0.1:8082 weight=1;
#ip_hash;
}
我们这里本地测试,tomcat端口分别为8081和8082.weight表示权重,默认为1.表示请求分发的比例。这里为1:1表示2个tomcat均衡的处理请求。
server部分配置如下:
server {
listen 80;
server_name 127.0.0.1;
#charset koi8-r;
#access_log logs/host.access.log main;
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
#禁止访问WEB-INF目录下的文件
location ~ ^/(WEB-INF)/ {
deny all;
}
#静态资源文件到下面的文件夹去取
location ~ \.(html|js|css|png|gif)$ {
root D:/soft/test/static;
}
#其他的请求,如果jsp,或后台action请求交由tomcat处理
location / {
proxy_pass http://local_tomcat;
}
}
listen:表示nginx监听的端口,默认是80.
比例我上面配置了2个tomcat,端口分别为8081和8082.单独访问某个tomcat的系统(比例8081):
http://127.0.0.1:8081/系统名。
上面配置了nginx监听80端口,接收到请求后,静态资源从d:/soft/test/static目录查,动态资源请求分发给2个tomcat处理。
这样访问http://127.0.0.1/系统名时就可以了。
server_name:表示监听到之后需要转到哪里去,这时我们直接转到本地,这时是直接到nginx文件夹内。
location:表示匹配的路径,这时配置了/表示所有请求都被匹配到这里
root:里面配置了root这时表示当匹配这个请求的路径时,将会在这个文件夹内寻找相应的文件,这里对我们之后的静态文件伺服很有用。
index:当没有指定主页时,默认会选择这个指定的文件,它可以有多个,并按顺序来加载,如果第一个不存在,则找第二个,依此类推。
下面的error_page是代表错误的页面,这里我们暂时不用,先不管它。
配置完成后,在命令行执行nginx -t来查看配置时候正确。
如果已经启动了nginx,没必要关闭后再打开。可以执行nginx -s reload来重新加载配置。
3)tomcat配置修改
上面已经说明了2个tomcat的端口是8081和8082.因此需要分别修改2个tomcat的server.xml,更改端口。
改这2个地方:
然后 将相同的打包文件分别复制到2个tomcat的webapp下。我的打包文件如下:
index.jsp中加了标识,方便区分是哪个tomcat的请求。
resources目录下是使用的资源文件。
4)静态资源文件处理
因为上面2)中配置了静态资源到d:/soft/test/static目录查,因此将打包文件中的resources文件夹复制到d:/soft/test/static目录下。
完毕之后启动2个tomcat,然后启动nginx。
刷新一下页面:
由此,可以看到负载均衡已经实现了。
下面测试一下静态资源文件的分离:
也是Ok的。
这里特别说一下,
比如http://127.0.0.1/helloweb/resources/js/jquery-loadmask-0.4/jquery.loadmask.css这个静态资源文件。
在JSP中是helloweb/resources/js/jquery-loadmask-0.4/jquery.loadmask.css,那么nginx配置的静态资源文件查找的目录必须也要匹配上面的路径。