nginx+tomcat配置负载均衡
2011年10月31日
没有评论
使用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(); }