`
asgab
  • 浏览: 43646 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

Nginx反向代理Tomcat,以及Session会话(转)

 
阅读更多

一:Tomcat及JDK简介 

1.)Tomcat是一个免费的web应用服务器服务器,国内很多大型站点也是采用Tomcat来构建的。Tomcat是apache基金会的一个核心项目,其运行环境需要JDK的支持,Tomcat都是基于某个版本的JDK平台所研发,版本不对称,会导致Tomcat启动失败。

 

2.JDK1996年开发第一个版本,JDK主要组建JVMAppletAWT等。JDK1.1的版本引入了JAR格式,用户打包Java程序代码。还引入了JDBCJava通过驱动去连接数据库。

 

3.Java技术分为了三个方向:J2SE(标准本),J2EE(企业版),J2ME(移动版),J2SE就是Java2的标准版,主要用于桌面程序的软件编程。J2EEJava2的企业版,主要用户分布式网络程序的开发。J2ME主要应用于嵌入式系统开发,例如手机和PDA的编程。

 

4.Java类库:Java是面向对象编程语言,类则是对面向对象中的一种概念,对具有相同属性的事物具有相同属性的概念。类可以被具体化为一个一个的对象。

 

二:JVM简介:

1.JVMSun公司设计java语言的目标是让java程序可以适应于各种平台的计算机上运行,为了实现这个目标,Sun公司提出了java虚拟机机制。

 

2.Java虚拟机是编译和运行Java程序等命令及其运行环境的总称。Java源程序在编译后生存后缀为class的文件,该文件以字节码的方式进行编码。这种字节码实际上是一种伪代码,它包含各种指令,这种指令基本是与平台无关的指令。Java虚拟机在字节码文件的基础上解释这些字节码,以及将这些字节码转换为计算机的语言代码,并交给计算机执行。

 

3.)字节码是一种于平台无关的伪代码,通过Java命令演变成在各种平台上的机器代码,这些伪代码最终是在本地计算机平台是运行的,但Java程序好像是在这些Java命令的基础上运行的,因此这些Java命令的几个好像是如同我们所使用的VM虚拟机或者virtualbox等软件实现的虚拟机。

 

三:Tomcatweb架构应用中的位置以及处理流程图:

 

wKiom1Qtguzj_bQEAAJv64cYcm8593.jpg

四.安装JDK及Tomcat: 

1.)安装环境:

操作系统:CentOS6.5 x86_64

JDK版本:jdk-7u9-linux-x64.rpm

Tomcat版本:apache-tomcat-7.0.42.tar.gz

网络地址:tomcatnode1: 192.168.169.128tomcatnode1: 192.168.169.129httpd代理主机:192.168.169.130memcached节点使用http主机的地址。

 

2.)安装JDK,设置Java环境变量:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# rpm -ivhjdk-7u9-linux-x64.rpm 
Preparing...               ########################################### [100%]
   1:jdk                        ###########################################[100%]
  
# rpm -ql jdk | less
/usr/java/jdk1.7.0_09           #此目录为jdk安装目录
  
# vim/etc/profile.d/java.sh
JAVA_HOME=/usr/java/jdk1.7.0_09
PATH=$JAVA_HOME/bin:$PATH
export JAVA_HOME PATH
  
# source/etc/profile.d/java.sh
# java -version
java version"1.7.0_09"
Java(TM) SE RuntimeEnvironment (build 1.7.0_09-b05)
Java HotSpot(TM) 64-BitServer VM (build 23.5-b02, mixed mode)

 

 3.)安装Tomcat

1
2
3
4
# tar xfapache-tomcat-7.0.42.tar.gz -C /usr/local/
# cd /usr/local/
# ln -svapache-tomcat-7.0.42 tomcat
`tomcat' ->`apache-tomcat-7.0.42'

 

 

4.Tomcat安装后生成的目录:

       bintomcat相关命令存放位置。

       conftomcat配置文件存放位置。

       worktomcat工作目录。

       webapps:项目存放位置。

       temp:临时存放一些数据的目录。

 

5.Tomcat环境变量修改:

1
2
3
4
# vim/etc/profile.d/tomcat.sh
exportCATALINA_HOME=/usr/local/tomcat
exportPATH=$CATALINA_HOME/bin:$PATH
# source/etc/profile.d/tomcat.sh

 

6.)为Tomcat提供SysV脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# vim/etc/init.d/tomcat
#!/bin/bash  
# description: TomcatStart Stop Restart  
# processname: Tomcat 
# chkconfig: 234 20 80 
JAVA_HOME=/usr/java/jdk1.7.0_09
CATALINA_HOME=/usr/local/tomcat
export JAVA_HOMECATALINA_HOME
case $1 in
start)
  exec $CATALINA_HOME/bin/catalina.sh start ;;
stop)
  exec $CATALINA_HOME/bin/catalina.sh stop;;
restart)
  $CATALINA_HOME/bin/catalina.sh stop
  sleep 2
  exec $CATALINA_HOME/bin/catalina.sh start ;;
configtest)
  exec $CATALINA_HOME/bin/catalina.shconfigtest ;;
-v)
  exec $CATALINA_HOME/bin/catalina.sh  version.sh;;
*)
  exec $CATALINA_HOME/bin/catalina.sh * ;;
esac

 

7.)添加Tomcat开启启动:

1
2
3
# chmod +x/etc/init.d/tomcat
# chkconfig --addtomcat
# chkconfig tomcat on

 

8.)查看Tomcat版本信息及JDK信息:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# service tomcat -v
UsingCATALINA_BASE:   /usr/local/tomcat
UsingCATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR:/usr/local/tomcat/temp
Using JRE_HOME:        /usr/java/jdk1.7.0_09
Using CLASSPATH:      /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Usage: catalina.sh (commands ... )
commands:
  debug             Start Catalina in a debugger
  debug -security   Debug Catalina with a security manager
  jpda start        Start Catalina under JPDA debugger
  run               Start Catalina in the currentwindow
  run -security     Start in the current window with securitymanager
  start             Start Catalina in a separatewindow
  start -security   Start in a separate window with securitymanager
  stop              Stop Catalina, waiting up to 5seconds for the process to end
  stop n            Stop Catalina, waiting up to nseconds for the process to end
  stop -force       Stop Catalina, wait up to 5 seconds andthen use kill -KILL if still running
  stop n -force     Stop Catalina, wait up to n seconds andthen use kill -KILL if still running
  configtest        Run a basic syntax check on server.xml- check exit code for result
  version           What version of tomcat are yourunning?
Note: Waiting for theprocess to end and use of the -force option require that $CATALINA_PID isdefined

 

8.)启动Tomcat:

1
2
3
4
5
6
# service tomcat start
UsingCATALINA_BASE:   /usr/local/tomcat
UsingCATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR:/usr/local/tomcat/temp
Using JRE_HOME:        /usr/java/jdk1.7.0_09
Using CLASSPATH:      /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar

 

9.)检查Tomcat端口:

1
2
3
4
5
6
7
# ss -tnl
State      Recv-Q Send-Q                                   LocalAddress:Port                                     PeerAddress:Port 
LISTEN     0     100                                                :::8080                                              :::*     
LISTEN     0     128                                                :::22                                                :::*     
LISTEN     0     128                                                 *:22                                                 *:*     
LISTEN     0     100                                               ::1:25                                                :::*     
LISTEN     0     100                                         127.0.0.1:25                                                 *:

 

10.)访问测试:

wKioL1QthGWDvf6kAAaylUzMMfs451.jpg

 

11.)隐藏Tomcat版本信息:

当输入一个不存在的页面或者文件时,会显示当前Tomcat的版本信息,如果出现漏洞并且没有第一时间修复,很可能被利用。

wKioL1QthKfwahLEAAGi4vwlCCA132.jpg

1
2
3
4
5
6
# cd/usr/local/tomcat/lib/
# jar xf catalina.jar
# vimorg/apache/catalina/util/ServerInfo.properties
server.info=ApacheTomcat
server.number=www.stu32.com
server.built=Jul 2 201308:57:41

 

wKiom1QthGmjuPowAAFrcKzNHKE035.jpg

五.Tomcat配置文件:

1.server.xml:主配置文件。

2.context.xml:上下文,为部署每个webapp的默认配置文件。

3.web.xml:部署描述符文件,为所有部署当前tomcat实例上所有的webapp提供默认的部署描述符。

4.users.xml:为jsp页面提供访问权限的文件。

5.catalina.policy:当基于-security选项启动tomcat实例时会读取此配置文件。

6.catalina.propertiesJava属性定义的文件,用于设定类加载器路径,以及安全包列表,和一些调整性能的相关参数的信息。

 

六.Tomcat负载均衡:

1.)如开始介绍安装环境时写的网络地址,分为node1,node2节点以及nginx代理服务器,上面安装好的就为node1节点,现在开始配置node2节点,node2节点与node1节点配置一致。

wKiom1QthRiSw-yCAAWg4DbdlBk779.jpg

 

2.)编译安装Nginx:

编译过程参考前面的nginx初级使用部分。

wKiom1QthWvilQfXAAGn3CoOvLY130.jpg

3.)修改nginx配置文件,使其能够代理Tomcat node1,node2节点:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# vim/etc/nginx/nginx.conf
http{
    client_max_body_size 300m;
    client_body_buffer_size 600;
    proxy_read_timeout 600;
    proxy_send_timeout 600;
    proxy_buffer_size 16k;
    proxy_buffers 4 42k;
    proxy_busy_buffers_size 64k;
    proxy_temp_file_write_size 64k;
    upstream jsp_server {
        server 192.168.169.128:8080 weight=1max_fails=2 fail_timeout=30s;
        server 192.168.169.129:8080 weight=1max_fails=2 fail_timeout=30s;
}
server{
       location ~ .*.jsp$  {
        index index.jsp;
        proxy_passhttp://jsp_server;
        proxy_set_header X-Real-IP$remote_addr;
      }

 

分别在http段落定义upsream,server段调用jsp_server。

 

4.)定义jsp页面的测试页:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# cd/usr/local/tomcat/webapps/
# mkdir -pvsession/WEB-INF/{classes,lib}
# cd session
  
# vim index.jsp
<%@ pagelanguage="java" %>
<html>
  <head><title>Tomcat Sessionnode2</title></head>
  <body>
    <h1><fontcolor="red">Session.node2.com</font></h1>
    <tableborder="1">
      <tr>
        <td>Session ID</td>
    <%session.setAttribute("node1.com","node2.com"); %>
        <td><%= session.getId()%></td>
      </tr>
      <tr>
        <td>Created on</td>
        <td><%=session.getCreationTime() %></td>
     </tr>
    </table>
  </body>
</html>

此处配置的是node2节点,node1节点相同配置,为了测试,需要修改title部分为node1

 

5.)启动nginx,测试反向代理

wKiom1QthlSw9FFJAAFeLYwrMMM457.jpg

wKioL1QthoaTNHhGAAFehj-86N8786.jpg

代理部分基本配置已经完成。

 

七.基于Memcached构建MemcachedSession Manager Session会话服务器。

1.Session简介:Session对象的引入是为了弥补HTTP协议的不足,HTTP协议是无状态协议。Session是代表服务器于客户端之间的会话。Session的作用时间是用户到达某个特定的Web页面开始,直到用户离开Web站点,或者程序中利用代码终止了Session结束。引用Session可以让用户访问多个页面之间的切换也会保留该用户的信息。最简单的理解就是我们去网上购物的时候,已经添加到购物车,(前端为反向代理服务器)当我们需要付款的时候,就会跳到另外一个新的页面,那么我们所下的订单也会停留在上一个页面或者找不到了。

 

2.Memcached简介:Memcached是一款高性能分布式内存缓存系统,用户动态web应用减轻数据库压力。架构中的位置处于应用服务器于数据库中间,当用户第一次请求数据的时候,会经由数据库反回数据并且缓存到Memcached内存中,第二次访问的时候,就直接在Memcached内存中读取数据,从而提高动态,数据库访问速度。Memcached是基于存储键/值对的hashmap,其守护进程为Domain,其客户端也就是应用服务器,可以是php,jsp等语言。

 

3.Session工作流程图:

wKiom1QthquT2yPmAAG7XGOvJOk628.jpg

4.)下载Session所需要的jar包:

1
2
3
4
# ls
javolution-5.5.1.jar                memcached-session-manager-tc7-1.8.2.jar spymemcached-2.10.2.jar
memcached-session-manager-1.8.2.jar  msm-javolution-serializer-1.8.2.jar
cp */usr/local/tomcat/lib/

 

 5.)将jar包复制到node2节点:

1
scp *192.168.169.129:/usr/local/tomcat/lib/

 

6.)修改server.xml,在host上定义一个用于测试的context容器,并在其中创建一个会话管理器:

1
2
3
4
5
6
7
# vim/usr/local/tomcat/conf/server.xml
      <Context path="/session"docBase="/usr/local/tomcat/webapps/session">
         <ManagerclassName="de.javakaffee.web.msm.MemcachedBackupSessionManager"
        memcachedNodes="n1:192.168.169.130:11211"
        requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"     
        transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory"/>
       </Context>

 

7.)重启Tomcat,并修改node2节点的server.xml,和node1节点保持一致。

8.)安装memcached,可以使用源码包,也可以使用rpm包,去memcached站点下载,需要注意的是所依赖的libevent。我这边就是使用yum安装的了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# yum –y installmemcached
# service memcachedstart
# ss -tunl
Netid  State     Recv-Q Send-Q                                Local Address:Port                                  PeerAddress:Port 
udp    UNCONN    0      0                                                *:68                                              *:*     
udp    UNCONN    0      0                                                 *:11211                                           *:*     
udp    UNCONN    0      0                                               :::11211                                          :::*     
tcp    LISTEN    0      128                                              :::11211                                          :::*     
tcp    LISTEN    0      128                                              *:11211                                           *:*     
tcp    LISTEN    0      128                                               *:80                                              *:*     
tcp    LISTEN    0      128                                             :::22                                             :::*     
tcp    LISTEN    0      128                                              *:22                                              *:*     
tcp    LISTEN    0      100                                            ::1:25                                              :::*    
tcp    LISTEN    0      100                                      127.0.0.1:25                                              *:*

 

 9.)访问测试:

wKioL1Qth1DxQ54CAAGBW46nLqQ086.jpg

wKiom1QthyTSZyz9AAF_FXLFUKM610.jpg

测试得到的结果是网页的内容发生了变化,但是可以看到Session ID 一直没有变化。

 

分享到:
评论

相关推荐

    nginx+tomcat7+memcached session会话保持

    Nginx作为反向代理服务器,可以很好地处理这个问题,通过特定的配置策略,将来自同一用户的请求路由到同一台后端服务器。 Nginx的配置中,我们可以通过“ip_hash”指令来实现基于客户端IP的会话保持,这样相同IP的...

    nginx+tomcat+session同步

    nginx是流行的反向代理服务器,可以将用户请求分配到不同的tomcat服务器上,而tomcat是流行的Java应用服务器,可以处理用户请求并返回响应结果。 要实现session同步,我们需要在tomcat服务器上启用session复制机制...

    nginx+tomcat6+session共享

    标题中的“nginx+tomcat6+session共享”指的是在Web服务器和应用服务器的集群环境中,如何通过Nginx、Tomcat6以及Session共享技术来实现用户会话在多个服务器之间的同步。这一配置对于高并发、高可用的系统设计至关...

    nginx反向代理配置及优化以及核心讲解以及高性能集群搭建

    ### 一、Nginx反向代理配置 反向代理是Nginx的核心功能之一,它充当服务器和客户端之间的中介。当用户请求到达Nginx时,Nginx会根据配置将请求转发到后端服务器处理,然后将响应返回给用户。以下是一个基本的反向...

    nginx实现多个tomcat7直接session共享所需jar包

    标题中的“nginx实现多个tomcat7直接session共享所需jar包”指的是在分布式系统环境中,使用Nginx作为反向代理服务器,将用户请求分发到多个Tomcat7应用服务器上,同时实现用户会话(Session)在这些服务器之间的...

    nginx+tomcat+redis完成session共享

    1. **Nginx**:Nginx是一款高性能的反向代理服务器,通常用作负载均衡器。它能够接收用户的HTTP请求,并根据预设策略将请求转发到后端的Tomcat服务器。在session共享场景中,Nginx可以配置为将带有特定session ID的...

    nginx+tomcat8.+redis__session__单点登录、会话共享.zip

    1. 安装并配置Nginx,设置反向代理规则,将用户请求路由到后端的Tomcat服务器,并配置session stickiness,确保用户在相同会话中始终连接到同一台服务器。 2. 安装并配置Tomcat,添加Redis Session Manager到web应用...

    nginx tomcat memcached 集群 session共享

    Nginx作为反向代理服务器,负责负载均衡,Tomcat作为应用服务器运行Java Web应用程序,而Memcached则作为分布式内存缓存系统,用于存储和共享session数据。 1. **Nginx**:Nginx是一个高性能的HTTP和反向代理服务器...

    spring4+redis3+nginx1实现tomcat集群session共享源码

    总结,本方案通过Spring Session结合Redis的持久化存储以及Nginx的负载均衡和粘滞会话策略,有效地解决了Tomcat集群环境下的Session共享问题,提高了应用的可用性和扩展性。对于需要处理高并发和大规模用户量的Web...

    nginx+tomcat shiro实现多tomcat下session共享

    总结来说,"nginx+tomcat shiro实现多tomcat下session共享"是一种常见的分布式系统架构策略,通过Nginx的负载均衡、Shiro的会话管理以及Redis的中央存储,有效地解决了多服务器环境下session共享的问题,提高了系统...

    Windows7 + Nginx + Memcached + Tomcat 集群 session 共享

    本主题将详细探讨如何在Windows7环境下,利用Nginx作为负载均衡器,Memcached作为session存储,以及Tomcat作为应用服务器,实现session共享。 **1. Nginx介绍与配置** Nginx是一款高性能的HTTP和反向代理服务器,它...

    NGINX + TOMCAT 6 + REDIS 实现负载均衡 session会话同步

    本篇文章将详细探讨如何使用NGINX作为负载均衡器,结合TOMCAT 6应用服务器和REDIS作为session会话存储来实现负载均衡下的session会话同步。 首先,我们需要理解负载均衡的基本概念。负载均衡是指在多台服务器之间...

    nginx tomcat memcached session共享

    标题 "nginx tomcat memcached session共享" 描述的是一个关于Web服务器配置的实践,涉及到的主要技术是Nginx、Tomcat以及Memcached。这三种技术在IT行业中都是至关重要的组件,尤其是在构建高可用、高性能的Web应用...

    Windows + Nginx + Memcached + Tomcat 集群 session共享

    本知识点聚焦于如何在Windows环境下,利用Nginx作为反向代理,Memcached进行session共享,以及Tomcat作为Java应用服务器来搭建这样一个集群。这个配置确保了用户在集群中的任何一台服务器上的操作都能被其他服务器...

    Nginx+tomcat+session共享

    本案例探讨了如何利用Nginx作为反向代理和负载均衡器,Tomcat作为应用服务器,以及Redis作为session存储来实现session共享。下面将详细解释这个配置中的每个部分及其重要性。 首先,Nginx是一个高性能的HTTP和反向...

    Redis实现Nginx+Tomcat在windows平台上配置负载均衡的session共享(2)

    标题 "Redis实现Nginx+Tomcat在windows平台上配置负载均衡的session共享(2)" 指向的是一个关于如何在Windows环境下使用Redis来实现Nginx与Tomcat之间的session共享,从而达到负载均衡配置的技术实践。在这个过程中...

    Nginx+tomcat负载均衡集群session复制 windos

    本文将详细介绍如何在Windows环境下,利用Nginx作为反向代理服务器,与Tomcat集群配合实现负载均衡,并进行session复制,确保用户会话在不同服务器之间的一致性。 首先,Nginx是一款轻量级、高性能的HTTP和反向代理...

    redis缓存服务器Nginx+Tomcat+redis+MySQL实现session会话共享

    "redis缓存服务器Nginx+Tomcat+redis+MySQL实现session会话共享"的主题旨在探讨如何利用这些技术组件来实现这一目标。以下是相关知识点的详细说明: **Redis**:Redis是一个高性能的键值数据存储系统,常用于做缓存...

    Nginx 集群 tomcat session 共享配置有源码

    在构建高可用的Web服务时,Nginx作为反向代理服务器和负载均衡器,常常与Tomcat这样的Java应用服务器配合使用。然而,当多个Tomcat实例构成集群时,会面临一个问题:用户session的共享。Session是Web应用程序用来...

    Windows+Nginx+Tomcat做负载均衡同时实现session共享Demo

    在IT行业中,构建高效、可扩展的Web服务是至关重要的,而Windows+Nginx+Tomcat的组合在处理高并发请求时,常被用来搭建负载均衡系统,同时通过session共享来保证用户会话的一致性。这个“Windows+Nginx+Tomcat做负载...

Global site tag (gtag.js) - Google Analytics