首页 > 代码库 > Nginx反向代理Tomcat,以及Session会话

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环境变量:

# 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

# 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环境变量修改:

# 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脚本:

# 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开启启动:

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


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

# 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:

# 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端口:

# 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

# 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节点:

# 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页面的测试页:

# 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包:

# 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节点:

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


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

# 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安装的了。

# 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 一直没有变化。


本文出自 “你对谁都微笑” 博客,请务必保留此出处http://54276311.blog.51cto.com/9130197/1560433

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