使用nginx做为前端服务器,tomcat作为后端服务器,通过一些简单的配置就可以达到tomcat集群的目的。一般情况下,只需要在nginx的配置文件nginx.conf进行如下配置即可。
http {
upstream tomcat-host{
server 192.168.1.201:8080 weight=3;
server 192.168.1.202:8080;
ip_hash;
}
server {
listen 80;
server_name www.domain.com;
location / {
proxy_pass http://tomcat-host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
}
}
}
其中upstream是配置后端服务器列表、load balance的权重,ip_hash能够把来自同一个客户端的多次请求指派到某个固定的后端服务器,能一定程度的解决session问题,如果完美的解决集群后session问题,可以采用memcached的方式来处理。在server段配置中,主要就是proxy_pass,prxoy_pass目标地址就是上述设置的upstream名字,注意,不能缺少“http://”,proxy_set_header处理客户端的IP信息,由于前端是nginx,在tomcat的java应用中用request.getRemoteAddr(),得到的ip信息不再是客户端的ip,而是nginx服务器的ip,解决办法是需要修改java应用,大致可以使用如下代码:
String ip = request.getHeader("x-forwarded-for");
if (ip == null || "".equals(ip.trim())) {
ip = request.getRemoteAddr();
} else {
String[] ars = ip.split(",");
ip = ars[ars.length-1].trim();
}
(责任编辑:IT) |