Nginx是一个反向代理服务器,用于做负载平衡,可以再它之下连接若干个tomcat服务器。但由于session问题,会出现同一个sessionID但是收到的session内容不同,所以要用到memcached做这些tomcat的session共享
Nginx tomcat 和 memcahed 的安装包在: http://download.csdn.net/detail/u012364631/8996519
我用了两个tomcat服务器做示例
Step 1 配置tomcat
1. 解压tomcat ,分别为D:\testTomcat\apache-tomcat-7.0.56-1
和 D:\testTomcat\apache-tomcat-7.0.56-2
2. 使两个tomcat可以同时运行:
l 修改D:\testTomcat\apache-tomcat-7.0.56-1\conf\server.xml
将Service标签下的<Connectorport="原始端口" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
将原始端口改为11081
l 修改D:\testTomcat\apache-tomcat-7.0.56-2\conf\server.xml
<Server port="8005" shutdown="SHUTDOWN">
8005改为9005
将Service标签下的<Connectorport="原始端口" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
原始端口改为11082
<Connector port="8009" protocol="AJP/1.3"redirectPort="8443" />
8009改为9009
l 修改D:\testTomcat\apache-tomcat-7.0.56-1\bin\下的catalina.bat、startup.bat、shutdown.bat文件将其中的所有 CATALINA_HOME 替换成CATALINA_HOME1;类似地,将apache-tomcat-7.0.56-2\bin\下的这三个文件内容中的CATALINA_HOME替换成 CATALINA_HOME2
l 分别双击两个startup.bat启动两个tomcat。浏览器打开localhos:11081和localhos:11082检查是否成功
Step2 配置Memcached
1. 在Memcache.exe所在目录下执行memcached –d install,现在memcached已经作为系统服务可以随机启动,默认端口:11211
2. 将附件内的jar包全部拷贝到两个tomcat 的lib下
3. 分别配置两个tomcat :
a) 如果server.xml设置了虚拟目录,则在host标签下的Context标签(对应的虚拟目录)内加入
<ManagerclassName="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:localhost:11211"
requestUriIgnorePattern=".*/.(png|gif|jpg|css|js)$"
sessionBackupAsync="false"
sessionBackupTimeout="180000"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory"
copyCollectionsForSerialization="false"/>
b) 若果没设虚拟目录,则应在context.xml的Context标签下添加
<ManagerclassName="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:localhost:11211"
requestUriIgnorePattern=".*/.(png|gif|jpg|css|js)$"
sessionBackupAsync="false"
sessionBackupTimeout="180000"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory"
copyCollectionsForSerialization="false"/>
Step 3 配置Nginx
1. 将nginx的压缩包解压
2. 修改conf/nginx.conf: (附件中有修改好的文件)
在http{}中添加:
include proxy.conf; #导入自己新建的反向代理(负载均衡)规则配置文件
upstream tomcat_server{
serverlocalhost:11081 weight=1;#第一台机器
serverlocalhost:11082 weight=1;#第二台机器
}
将原始的server() 内的location / {} 改为:
location / {
root html;
index index.html index.htm;
proxy_passhttp://tomcat_server;
proxy_set_header Host $host;
proxy_set_header X-Real-IP$remote_addr;
proxy_set_header REMOTE-HOST$remote_addr;
proxy_set_headerX-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 50m;
client_body_buffer_size256k;
proxy_connect_timeout 1;
proxy_send_timeout 30;
proxy_read_timeout 60;
proxy_buffer_size 256k;
proxy_buffers 4 256k;
proxy_busy_buffers_size256k;
proxy_temp_file_write_size256k;
proxy_next_upstream errortimeout invalid_header http_500 http_503 http_404;
proxy_max_temp_file_size128m;
}
Step 4.测试
1. 将附录中的testNginx文件夹分别赋值到两个tomcat的webapps目录下,并将其中的testNginx/index.jsp内out.println("apache-tomcat-7.0.56-01");一行分别改为-01和-02
2. 确保memched服务处于运行状态
3. 启动两个tomcat
4. 启动nginx.exe
5. 浏览器输入localhost\testNginx 并刷新几次,会发现sessionid不变sessionPort在两个tomcat下切换;且通过num的值可以发现,两个tomcat共享了session: