您的位置:首页 > 运维架构 > Tomcat

Nginx 服务器 之Nginx与tomcat实现负载均衡

2016-12-01 11:13 465 查看

[b]

1 <?xml version="1.0" encoding="UTF-8"?>
2
3 <Context>
4
5     <WatchedResource>WEB-INF/web.xml</WatchedResource>
6     <WatchedResource>${catalina.base}/conf/web.xml</WatchedResource>
7
8     <!-- sticky session 最小配置-->
9     <!-- className 管理器类名 -->
10     <!-- memcachedNodes memcached服务器节点,以节点名:主机:端口形式表示,其中节点名随意命名,但不同tomcat间要一致 -->
11     <!-- sticky隐含默认值为true,此时为sticky session模式 -->
12     <!-- failoverNodes 仅适用于sticky模式, n1表示主要将session备份到n2,如果n2不可用,再用n1-->
13     <!-- 另一台服务器配置正好相反,这样保证将session保存到其它机器,避免整个机器崩溃时tomcat与session一起崩溃-->
14     <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
15         memcachedNodes="n1:192.168.1.62:11211,n2:192.168.1.63:11211"
16         failoverNodes="n1"
17     />
18
19     <!-- 经常用到的生产环境sticky(粘性)模式配置 -->
20     <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
21         memcachedNodes="n1:192.168.1.62:11211,n2:192.168.1.63:11211"
22         failoverNodes="n1"
23         requestUriIgnorePattern=".*\.(jpg|png|css|js)$"
24         memcachedProtocol="binary"
25         transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
26     />
27
28     <!-- 经常用到的生产环境non-sticky(非粘性模式)模式配置 -->
29     <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
30         memcachedNodes="n1:192.168.1.62:11211,n2:192.168.1.63:11211"
31         sticky="false"
32         sessionBackupAsync="false"
33         lockingMode="auto"
34         requestUriIgnorePattern=".*\.(jpg|png|css|js)$"
35         memcachedProtocol="binary"
36         transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
37     />
38
39     <!--
40     <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
41         memcachedNodes="n1:192.168.1.62:11211,n2:192.168.1.63:11211"
42
43         #sticky模式,默认true
44         sticky="false"
45
46         #仅适用于sticky模式,n1表示主要将session备份到n2,如果n2不可用,再用n1
47         failoverNodes="n1"
48
49         #忽略的请求类型,这些类型请求不处理session
50         requestUriIgnorePattern=".*\.(jpg|png|css|js)$"
51
52         #例如context中设置sessionPath=/时,一个host下多个应用可能有相同session_id,
53         #此时向memcached写入时会造成混乱,可通过以下方式加前缀区分不同应用
54         storageKeyPrefix="static:name|context|host|webappVersion|context.hash|host.hash|多项组合,以,间隔"
55
56         #设置mecached协议数据传输方式,默认text,设为binary有助力性能提升
57         memcachedProtocol="binary"
58
59         #是否异步存储session变化,默认true,性能好,适用于sticky模式,
60         #non-sticky时建议设置为false,避免延迟造成信息不一致
61         sessionBackupAsync="false"
62
63         #仅适用于non-sticky模式,为避免同步编辑冲突,在修改session时锁定
64         #同步编辑一种可能发生的情况是在ajax请求时,同一页多个请求同时发起,可能会访问不同后端
65         #auto 读模式不锁写模式锁
66         #uriPattern模式,将URI+"?"+queryString与模式Regex匹配,如果匹配则锁定
67         lockingMode="none|all|auto|uriPattern:Regex"
68
69         #使用第三方序列化工具,提高序列化性能
70         #常用的第三方工具kryo, javolution, xstream等
71         #此时需要向tomcat/lib下添加相关jar包
72         transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
73
74     />
75     -->
76
77 </Context>


View Code
四、集群环境开发注意事项

1、实体类要序列化( implements Serializable)

private static final long serialVersionUID = 3349238980725146825L;

2、获取客户端请求地址的方式 。在nginx-tomcat.conf中添加如下配置:

server {
location / {
proxy_set_header   X-Real-IP        $remote_addr; # 真实的客户端IP
}
}


java代码:

public static String  getIp(HttpServletRequest request){
String remoteIp =request.getRemoteAddr();
String headIp=request.getHeader("X-Real-IP");
return headIp==null?remoteIp:headIp;
}


3、动静分离
  把静态文件放在nginx服务器中(css、js、图片)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: