nginx的简单使用和使用nginx在windows上搭建tomcat集群

nginx是一款轻量级的web服务器,常用的作用为服务器/反向代理服务器以及电子邮件(IMAP/POP3)代理服务器

1.为什么我们要使用Nginx?

 

  • 反向代理:

    反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。

  • 负载均衡:负载均衡,英文名称为Load Balance,是指建立在现有网络结构之上,并提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。其原理就是数据流量分摊到多个服务器上执行,减轻每台服务器的压力,多台服务器共同完成工作任务,从而提高了数据的吞吐量.
  • 动静分离:将静态的资源放到反向服务器,节省用户的访问时间.

 

2.如何使用nginx?

 

  • 在Windows上使用Nginx搭建Tomcat服务器
    • 在windows上使用nginx方法审视简单,下载windows的nginx解压,执行nginx.exe即可访问地址localhost
    • 在windows上搭建tomcat集群的软件准备 两个tomcat和一个nginx,注意修改tomcat1的端口和tomcat2的端口,否则端口冲突启动不了 这里我是修改为tomcat1为8080,tomcat2为8090
    • 启动  nginxtomcat1tomcat2
    • 准备一个简单的javaweb项目testsession,内容只有一个index.jsp,内容如下
      <%@ page language="java" contentType="text/html; charset=UTF-8"
          pageEncoding="UTF-8"%>
      <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
      <html>
      <head>
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      <title>Insert title here</title>
      </head>
      <body>
      
          tomcat1放在tomcat1下-----放在tomcat2下就是2(为了区分用)    此次请求的<%=request.getRequestedSessionId() %>
      </body>
      </html>

       

    • 将此项目放在tomcat1的webapps下和tomcat2的webapps下 
    • 配置nginx  修改nginx下的conf文件夹中nginx.conf
      •  需要在http节点上添加一个
        upstream servlet_jimisun{
                        server 127.0.0.1:8080;//后面端口是tomcat1的端口
                        server 127.0.0.1:8090;//后面端口是tomcat2的端口
                    }

         

      • 在location /节点下
        proxy_pass http://servlet_jimisun;

         

      • 访问地址localhost/testsession  (注意并没有访问tomcat的端口,而是访问的80端口,nginx将请求转发给tomcat1和tomcat2
      • windows上通过nginx部署tomcat集群完成......(有问题的)
      • 注意Session共享问题:SessionID是不一样的,每一次请求都会创建一个新的Session,这样显然不符合我们的要求

 

3.如何解决通过nginx部署tomcat集群的Session共享问题

 

  • 解决Session共享方法1(仅限于windows):
    • 修改tomcat的server.xml 支持共享
      将 引擎标签下的 

      <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/> 注释去掉

       

    • 修改项目的web.xml    在web.xml中添加一个节点
      <distributable/>

       

    • 此时tomcat1的sessionid和tomcat2的sessionid是一样的 都会认为是一次请求
  • 解决Session共享方法2:将session的id放入redis中
  • 解决Session共享方法3:保证一个ip地址永远访问一台tomcat服务器,就不存在session共享问题了,在upstream中添加
    ip_hash;

    这样刷新多少次本ip只会访问由nginx通过ip_hash算出的tomcat2服务器,这样就不存在session共享问题了

 

 

 

 

当前:nginx有更高深的用法;还有tomcat集群有更多问题需要去解决,小生不才windows集群只能给大家讲到这里,如有问题,敬请指正!

posted @ 2017-11-15 20:39  jimisun  阅读(1011)  评论(0编辑  收藏  举报
豫ICP备17005230号-3