这次介绍一下实际应用其搭建一个 tomcat 集群的服务器,以测试为目的。
为了解决静态文件与动态请求分离和上传文件的访问问题,把 1 个 nginx 和 2 个 tomcat 服务器目录均放在 D:/web/ROOT
1、共享 session 的通过 filter 将 session 数据存储到 memcached 中。
修改自 memcached-session-filter ,项目地址: http://code.google.com/p/memcached-session-filter/
设置 Java 项目的配置文件 web.xml
sessionFilter com.ezerg.memsession.MemcachedSessionFilter memcachedNodes localhost:11211 localhost:11212 sessionTimeout 300 sessionFilter /*
将项目文件复制到 D:/web/ROOT 目录。
2、启动 2 个 tomcat 服务器。
修改 server.xml ,修改一个即可,防止端口冲突不能启动
修改完成后,分别启动 tomcat 。
3、启动 nginx 服务器。
修改 nginx.conf 文件,以下是一些主要的配置:
... //开启 gzip
gzip on;
... //负载的两台 tomcat
upstream tomcat {
ip_hash;
server 192.168.0.31:8081 max_fails=1 fail_timeout=60s;
server 192.168.0.31:8082 max_fails=1 fail_timeout=60s;
}
server {
..
// 静态文件根目录
location / {
root d:/web/ROOT;
index index.html index.htm index.do;
client_max_body_size 100m;
client_body_buffer_size 128k;
}
...
// .jsp 和 .do 的请求转发给 tomcat
location ~ (\.jsp)|(\.do)$ {
proxy_connect_timeout 4s;
proxy_read_timeout 2s;
proxy_next_upstream http_502 http_504 error timeout invalid_header;
proxy_pass http://tomcat;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
// 禁止访问 WEB-INF
location ~ ^/(WEB-INF)/ {
deny all;
}
...
建议:
1、max_fails 参数在大型系统中建议设置为3,如果没有多个后端服务器的话保持默认即可。
2、proxy_read_timeout要根据自身程序而定。
修改完成后,启动 nginx 。修改配置文件后,可以动态加载配置文件:nginx -s reload