上述配置适合解决method=post的问题,如果需要get方式支持中文,如form用get方式提交,或者点击链接支持中文,则需要修改 Tomcat根目录的 conf/server.xml文件中,找,在里面加
注意如果用于开发服务器,需要找到正确的位置,如Eclipse的Servers下的配置文件。
但是在地址栏输入中文,仍然无法支持,只能禁止这种方式。
在这种情况下,访问http://192.168.1.14:808/study/index.do?check=1
输出为
Hello world!
The time on the server is 2014年8月6日 上午11时39分48秒, the host is , the host is 192.168.1.14:8081.
The name in session is 石永强.
The session id is C318A769671490E6822C04752499380F.
刷新之后,可以看到访问的是固定的服务器,这样就能保证用户Session不会出问题
2)使用MemCache
这需要Nginx的session插件,还需要tomcat的memcache插件,可是code.google.com访问不了,虽然文档很多,也实现不了,看以后吧。
只能采用Session复制的方式
3)tomcat 8配置cluster非常简单,当然,这种集群方式采取广播的方式复制Session,当数量到了一定程度必然会引起广播风暴,不适合大型系统
最简单的设置方法:
A)将server.xml中标签注释去掉,默认如下
B)在需要复制Session的web-app中的web.xml增加一行:
C)关掉防火墙:service iptables stop,如果使用的是firewalld,使用命令service firewalld stop
设置Cluster需要注意的地方(官方文档)
a)所有的session属性必须实现java.io.Serializable
b)去掉server.xml中Cluster元素的注释
c)如果要定制valves,确保要设置ReplicationValve
d)确保在web.xml中增加
e)如果使用了mod_jk,在Engine中要设置jvmRoute属性为 workers.properties的worker名称一致
f)确保所有的时间都相同,经过NTP服务器的同步
g)确保你的负载均衡设置为会话粘连模式(sticky session mode)
在浏览器中访问http://192.168.1.104:808/study/index.do,会发现在设置了ip_hash的情况下,根据页面提示,会发现总是访问一个服务器,将这个tomcat关掉,再刷新页面,就会发现自动访问另一个tomcat,而session信息不变。
而且,如果去掉了ip_hash模式,nginx会自动按顺序依次访问系统,但其session ID不变。
如果要更好的测试可以,可以分别访问http://192.168.1.14:8081/study/index.do和http://192.168.1.14:8082/study/index.do,会发现是一致的session ID,而且还可以访问http://192.168.1.14:8081/study/index.do?check=1,这时候已经设置了session的属性值,然后访问http://192.168.1.14:8082/study/index.do,就可以知道确实发生了Session复制。
如果需要更复杂的定制效果,可以看一下文档
对于防火墙的问题,可以增加如下规则
iptables -A INPUT -i eth0 -d 224.0.0.4 -j ACCEPT
vim /etc/sysconfig/iptables
增加以下内容:
-A INPUT -p udp -m state --state NEW -m udp --dport 45564 -j ACCEPT
启动防火墙
service iptables save
service iptables start
3)Apache+mod_jk+tomcat方案
a)下载apache开发包
yum install httpd-*
b)下载mod_jk
wget http://mirrors.cnnic.cn/apache/tomcat/tomcat-connectors/jk/tomcat-connectors-1.2.40-src.tar.gz
tar xvf tomcat-connectors-1.2.40-src.tar.gz
cd tomcat-connectors-1.2.40-src.tar.gz
cd native
./configure --with-apxs=/bin/apxs
make
make install
c)配置Apache
因为httpd.conf包含conf.module.d目录下文件,在此目录下新建00-add.conf,输入以下内容
vim /work/tomcat8-2/conf/server.xml
修改如下内容,在Engine标签增加jvmRoute="worker2"
f)重启Apache和tomcat,浏览器中输入http://192.168.1.14/study/index.do,可以看到类似的内容
The time on the server is 2014年8月6日 下午05时21分04秒, the host is , the host is 192.168.1.14:80.
The name in session is .
The session id is AE132D73152E74C043ED64ED6F27707E.worker2.
这里有一个有意思的事情,session id会增加一个i额后缀,即worker1或者workder2,应该是jvmRoute的作用,但本质来说还是一个session
用mod_jk的一个问题是不知道访问的是哪台机器,因为显示的apache的地址端口,通过session可以知道到底是哪台机器。
之前我们配置过nginx的均衡,浏览器输入http://192.168.1.14:808/study/index.do
会看到session id去掉后缀确实是一样的,而且运行http://192.168.1.14:808/study/index.do?check=1可以看到session信息是共享的。