首页 > 代码库 > Nginx反向代理Tomcat,以及Session会话
Nginx反向代理Tomcat,以及Session会话
一:Tomcat及JDK简介
1.)Tomcat是一个免费的web应用服务器服务器,国内很多大型站点也是采用Tomcat来构建的。Tomcat是apache基金会的一个核心项目,其运行环境需要JDK的支持,Tomcat都是基于某个版本的JDK平台所研发,版本不对称,会导致Tomcat启动失败。
2.)JDK于1996年开发第一个版本,JDK主要组建JVM,Applet,AWT等。JDK1.1的版本引入了JAR格式,用户打包Java程序代码。还引入了JDBC,Java通过驱动去连接数据库。
3.)Java技术分为了三个方向:J2SE(标准本),J2EE(企业版),J2ME(移动版),J2SE就是Java2的标准版,主要用于桌面程序的软件编程。J2EE是Java2的企业版,主要用户分布式网络程序的开发。J2ME主要应用于嵌入式系统开发,例如手机和PDA的编程。
4.)Java类库:Java是面向对象编程语言,类则是对面向对象中的一种概念,对具有相同属性的事物具有相同属性的概念。类可以被具体化为一个一个的对象。
二:JVM简介:
1.)JVM是Sun公司设计java语言的目标是让java程序可以适应于各种平台的计算机上运行,为了实现这个目标,Sun公司提出了java虚拟机机制。
2.)Java虚拟机是编译和运行Java程序等命令及其运行环境的总称。Java源程序在编译后生存后缀为class的文件,该文件以字节码的方式进行编码。这种字节码实际上是一种伪代码,它包含各种指令,这种指令基本是与平台无关的指令。Java虚拟机在字节码文件的基础上解释这些字节码,以及将这些字节码转换为计算机的语言代码,并交给计算机执行。
3.)字节码是一种于平台无关的伪代码,通过Java命令演变成在各种平台上的机器代码,这些伪代码最终是在本地计算机平台是运行的,但Java程序好像是在这些Java命令的基础上运行的,因此这些Java命令的几个好像是如同我们所使用的VM虚拟机或者virtualbox等软件实现的虚拟机。
三:Tomcat在web架构应用中的位置以及处理流程图:
四.安装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.128,tomcatnode1: 192.168.169.129,httpd代理主机:192.168.169.130,memcached节点使用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安装后生成的目录:
bin:tomcat相关命令存放位置。
conf:tomcat配置文件存放位置。
work:tomcat工作目录。
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.)访问测试:
11.)隐藏Tomcat版本信息:
当输入一个不存在的页面或者文件时,会显示当前Tomcat的版本信息,如果出现漏洞并且没有第一时间修复,很可能被利用。
# 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
五.Tomcat配置文件:
1.)server.xml:主配置文件。
2.)context.xml:上下文,为部署每个webapp的默认配置文件。
3.)web.xml:部署描述符文件,为所有部署当前tomcat实例上所有的webapp提供默认的部署描述符。
4.)users.xml:为jsp页面提供访问权限的文件。
5.)catalina.policy:当基于-security选项启动tomcat实例时会读取此配置文件。
6.)catalina.properties:Java属性定义的文件,用于设定类加载器路径,以及安全包列表,和一些调整性能的相关参数的信息。
六.Tomcat负载均衡:
1.)如开始介绍安装环境时写的网络地址,分为node1,node2节点以及nginx代理服务器,上面安装好的就为node1节点,现在开始配置node2节点,node2节点与node1节点配置一致。
2.)编译安装Nginx:
编译过程参考前面的nginx初级使用部分。
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,测试反向代理:
代理部分基本配置已经完成。
七.基于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工作流程图:
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.)访问测试:
测试得到的结果是网页的内容发生了变化,但是可以看到Session ID 一直没有变化。
本文出自 “你对谁都微笑” 博客,请务必保留此出处http://54276311.blog.51cto.com/9130197/1560433
Nginx反向代理Tomcat,以及Session会话