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

Nginx+Tomcat 集群部署

2017-09-07 21:47 375 查看

1.Nginx + Tomcat 集群部署 简单配置

1 #user  nobody;
2 worker_processes  4;#工作进程的个数
3
4 #error_log  logs/error.log;
5 #error_log  logs/error.log  notice;
6 #error_log  logs/error.log  info;
7
8 #pid        logs/nginx.pid;
9
10
11 events {
12     worker_connections  1024;  #单个进程连接数
13 }
14
15
16 http {
17     include       mime.types;
18     default_type  application/octet-stream;
19
20     #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
21     #                  '$status $body_bytes_sent "$http_referer" '
22     #                  '"$http_user_agent" "$http_x_forwarded_for"';
23
24     #access_log  logs/access.log  main;
25
26     sendfile        on;
27     #tcp_nopush     on;
28
29     #keepalive_timeout  0;
30     keepalive_timeout  65;
31
32     #gzip  on;
33     #配置反向代理配置
34     gzip on;
35     upstream netitcast.com{
36         # 定下请求ip_hash;
37         ip_hash;
38         server 127.0.0.1:8181 weight=1;#服务器配置 代理分配  weight:分配权重 down:不参与负载均衡
39         server 192.168.0.105:8181 weight=1;#
40     }
41
42     server {
43         listen       8888;
44         server_name  localhost;
45
46         #charset koi8-r;
47
48         #access_log  logs/host.access.log  main;
49
50         location / {
51             root   html;
52             index  index.html index.htm;
53             # 配置
54             proxy_pass http://netitcast.com;
55         }
56
57         #error_page  404              /404.html;
58
59         # redirect server error pages to the static page /50x.html
60         #
61         error_page   500 502 503 504  /50x.html;
62         location = /50x.html {
63             root   html;
64         }
65
66         # proxy the PHP scripts to Apache listening on 127.0.0.1:80
67         #
68         #location ~ \.php$ {
69         #    proxy_pass   http://127.0.0.1;
70         #}
71
72         # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
73         #
74         #location ~ \.php$ {
75         #    root           html;
76         #    fastcgi_pass   127.0.0.1:9000;
77         #    fastcgi_index  index.php;
78         #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
79         #    include        fastcgi_params;
80         #}
81
82         # deny access to .htaccess files, if Apache's document root
83         # concurs with nginx's one
84         #
85         #location ~ /\.ht {
86         #    deny  all;
87         #}
88     }
89
90
91     # another virtual host using mix of IP-, name-, and port-based configuration
92     #
93     #server {
94     #    listen       8000;
95     #    listen       somename:8080;
96     #    server_name  somename  alias  another.alias;
97
98     #    location / {
99     #        root   html;
100     #        index  index.html index.htm;
101     #    }
102     #}
103
104
105     # HTTPS server
106     #
107     #server {
108     #    listen       443 ssl;
109     #    server_name  localhost;
110
111     #    ssl_certificate      cert.pem;
112     #    ssl_certificate_key  cert.key;
113
114     #    ssl_session_cache    shared:SSL:1m;
115     #    ssl_session_timeout  5m;
116
117     #    ssl_ciphers  HIGH:!aNULL:!MD5;
118     #    ssl_prefer_server_ciphers  on;
119
120     #    location / {
121     #        root   html;
122     #        index  index.html index.htm;
123     #    }
124     #}
125
126 }

2.关于Session 的问题

  2.1Tomcat 提供了Cluster 的组件实现session 复制 ,Clurster 的配置

<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"
channelSendOptions="8">
<!--
复制方式:
org.apache.catalina.ha.session.DeltaManager:复制所有的session 到所有的节点(节点太多,耗费资源)
org.apache.catalina.ha.session.BackupManager:

expireSessionsOnShutdown:一个程序被关闭时候,是否要销毁所有session
notifyListenersOnReplication:session复制和移动的时候通知
-->
<Manager className="org.apache.catalina.ha.session.DeltaManager"
expireSessionsOnShutdown="false"
notifyListenersOnReplication="true"/>

<Channel className="org.apache.catalina.tribes.group.GroupChannel">
<Membership className="org.apache.catalina.tribes.membership.McastService"
address="228.0.0.4"
port="45564"
frequency="500"
dropTime="3000"/>
<Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
address="auto"
port="4002"
autoBind="100"
selectorTimeout="5000"
maxThreads="6"/>

<Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
<Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
</Sender>
<Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
<Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>
</Channel>

<Valve className="org.apache.catalina.ha.tcp.ReplicationValve"
filter=""/>
<Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>

<Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
tempDir="/tmp/war-temp/"
deployDir="/tmp/war-deploy/"
watchDir="/tmp/war-listen/"
watchEnabled="false"/>

<ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>
<ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
</Cluster>

           注意:使用Cluster的组件实现Session复制的时候,一定要在程序中web.xml加上这样一句告诉tomcat这个程序是分布式        

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="WebApp_ID" version="2.5">
<display-name>Test</display-name>
<!--
分布式
-->
<distributable/>
</web-app>

测试Session复制和Nginx集群是否成功页面

1 <%@ page contentType="text/html; charset=GBK" %>
2 <%@ page import="java.util.*" %>
3 <html><head><title>Cluster App Test</title></head>
4 <body>
5 Server Info:
6 <%
7 out.println(request.getLocalAddr() + " : " + request.getLocalPort()+"<br>");%>
8 <%
9   out.println("<br> ID " + session.getId()+"<br>");
10   // 如果有新的 Session 属性设置
11   String dataName = request.getParameter("dataName");
12   if (dataName != null && dataName.length() > 0) {
13      String dataValue = request.getParameter("dataValue");
14      session.setAttribute(dataName, dataValue);
15   }
16   out.println("<b>Session 列表</b><br>");
17   System.out.println("============================");
18   Enumeration e = session.getAttributeNames();
19   while (e.hasMoreElements()) {
20      String name = (String)e.nextElement();
21      String value = session.getAttribute(name).toString();
22      out.println( name + " = " + value+"<br>");
23          System.out.println( name + " = " + value);
24    }
25 %>
26   <form action="index.jsp" method="POST">
27     名称:<input type=text size=20 name="dataName">
28      <br>
29     值:<input type=text size=20 name="dataValue">
30      <br>
31     <input type=submit>
32    </form>
33 </body>
34 </html>

 

到了这里我有两个疑问没有解决,

1.使用Cluster虽然Session复制成功了,但是在网页上使用iframe 框架时候会出现失效

2.文件上传的问题

 

       

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: