tomcat的部署及session绑定反代

Tomcat是由Apache软件基金会下属的Jakarta项目开发的一个Servlet容器,按照

Sun Microsystems提供的技术规范,实现了对Servlet和JavaServer Page(JSP)

的支持,并提供了作为Web服务器的一些特有功能,如Tomcat管理和控制平台、

安全局管理和Tomcat阀等。由于Tomcat本身也内含了一个HTTP服务器,它也可

以被视作一个单独的Web服务器。但是,不能将Tomcat和Apache Web服务器混

淆,Apache Web Server是一个用C语言实现的HTTP web server;这两个HTTP

web server不是捆绑在一起的。Apache Tomcat包含了一个配置管理工具,也可

以通过编辑XML格式的配置文件来进行配置。 摘自-wiki

规划
 apache + mod_jk / mod_proxy   172.16.43.1(salve1.king.com)
 jdk , tomcat                  172.16.43.2(salve2.king.com)
 jdk , tomcat                  172.16.43.3(salve2.king.com)

1 .基本配置 jdk , tomcat (slave2.king.com , slave3.king.com)

i) 准备jdk , tomcat的bin包
jdk-7u9-linux-x64.rpm
apache-tomcat-7.0.42.tar.gz
#
ii) 安装配置jdk
rpm -ivh jdk-7u9-linux-x64.rpm
vim /etc/profile.d/java.sh
export JAVA_HOME=/usr/java/latest
export PATH=$JAVA_HOME/bin:$PATH
# 退出编辑后重新执行该脚本导出环境变量
. /etc/profile.d/java.sh
java --version
# 可以看到如下信息
[[email protected] ~]# java -version
java version "1.7.0_09"
Java(TM) SE Runtime Environment (build 1.7.0_09-b05)
Java HotSpot(TM) 64-Bit Server VM (build 23.5-b02, mixed mode)
# 最后利用javac编译helloworld确保成功
vim Hello.java
public class Hello {
  public static void main(String[] args) {
    System.out.println("Hello Wolrd");
  }
}
# 编译java代码
javac Hello.java
# 运行java代码 , 注意这里是 类名
java Hello

iii) 配置安装tomcat
tar xf apache-tomcat-7.0.42.tar.gz -C /usr/local
ln -sv /usr/local/apache-tomcat-7.0.42 /usr/local/tomcat
#
vim /etc/init.d/tomcat
#!/bin/sh
# Tomcat init script for Linux.
#
# chkconfig: 2345 96 14
# description: The Apache Tomcat servlet/JSP container.
# JAVA_OPTS=‘-Xms64m -Xmx128m‘
JAVA_HOME=/usr/java/latest
CATALINA_HOME=/usr/local/tomcat
export JAVA_HOME CATALINA_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 ;;
*)
  echo "Usage: `basename $0` {start|stop|restart}"
  exit 1
  ;;
esac
#
# 编辑完毕后添加tomcat服务开机启动
chmod +x /etc/init.d/tomcat
chkconfig --add tomcat
chkconfig tomcat on
service tomcat start

# 测试不改任何配置文件,tomcat默认监听在8080端口,直接访问

2. 反代配置 apache + mod_jk(ajp) / mod_proxy(ajp , http) + tomcat

i) 准备apache , tomcat-connectors(mod_jk)的源码包 (salve1.king.com)
# mod_proxy是apache的原生模块
httpd-2.4.9.tar.bz2
tomcat-connectors-1.2.37-src.tar.gz
ii) 安装配置apache基于mod_jk(ajp协议)的反向代理 (salve1.king.com)
编译需要依赖 pcre-devel-7.8-6.el6.bz2  apr-1.5.0.bz2  apr-util-1.5.3.bz2
按需进行依次编译安装
tar xf pcre-devel-7.8-6.el6.bz2
cd pcre-devel-7.8-6
./configure --prefix=/usr/local/pcre
make && make install
#
tar xf apr-1.5.0.tar.bz2
cd apr-1.5.0
./configure --prefix=/usr/local/apr
make && make install
#
tar xf apr-util-1.5.3.tar.bz2
cd apr-util-1.5.3
./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
make && make install
#
# 安装之前请确保系统之前预装的httpd已被卸载
rpm -e httpd --nodeps
tar xf httpd-2.4.9.tar.bz2
cd httpd-2.4.9
./configure --prefix=/usr/local/apache --sysconfdir=/etc/httpd --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --enable-mpms-shared=all --with-mpm=event --enable-proxy --enable-proxy-http --enable-proxy-ajp --enable-proxy-balancer  --enable-lbmethod-heartbeat --enable-heartbeat --enable-slotmem-shm  --enable-slotmem-plain --enable-watchdog
make && make install
#
# 编辑/etc/httpd/httpd.conf,添加如下行即可:
PidFile  "/var/run/httpd.pid" # 32行
# 将如下模块启动,否则无法启动httpd
LoadModule slotmem_shm_module modules/mod_slotmem_shm.so #128
#
# 启动脚本如下 vim /etc/rc.d/init.d/httpd
#!/bin/bash
#
# httpd        Startup script for the Apache HTTP Server
#
# chkconfig: - 85 15
# description: The Apache HTTP Server is an efficient and extensible  #          server implementing the current HTTP standards.
# processname: httpd
# config: /etc/httpd/conf/httpd.conf
# config: /etc/sysconfig/httpd
# pidfile: /var/run/httpd/httpd.pid
#
. /etc/rc.d/init.d/functions
if [ -f /etc/sysconfig/httpd ]; then
        . /etc/sysconfig/httpd
fi
HTTPD_LANG=${HTTPD_LANG-"C"}
INITLOG_ARGS=""
apachectl=/usr/local/apache/bin/apachectl   # 修改apachectl路径
httpd=/usr/local/apache/bin/httpd      # 修改httpd bin路径
prog=httpd
pidfile=${PIDFILE-/var/run/httpd.pid}
lockfile=${LOCKFILE-/var/lock/subsys/httpd}
RETVAL=0
STOP_TIMEOUT=${STOP_TIMEOUT-10}
start() {
        echo -n $"Starting $prog: "
        LANG=$HTTPD_LANG daemon --pidfile=${pidfile} $httpd $OPTIONS
        RETVAL=$?
        echo
        [ $RETVAL = 0 ] && touch ${lockfile}
        return $RETVAL
}
stop() {
    echo -n $"Stopping $prog: "
    killproc -p ${pidfile} -d ${STOP_TIMEOUT} $httpd
    RETVAL=$?
    echo
    [ $RETVAL = 0 ] && rm -f ${lockfile} ${pidfile}
}
reload() {
    echo -n $"Reloading $prog: "
    if ! LANG=$HTTPD_LANG $httpd $OPTIONS -t >&/dev/null; then
        RETVAL=6
        echo $"not reloading due to configuration syntax error"
        failure $"not reloading $httpd due to configuration syntax error"
    else
        # Force LSB behaviour from killproc
        LSB=1 killproc -p ${pidfile} $httpd -HUP
        RETVAL=$?
        if [ $RETVAL -eq 7 ]; then
            failure $"httpd shutdown"
        fi
    fi
    echo
}
# See how we were called.
case "$1" in
  start)
    start
    ;;
  stop)
    stop
    ;;
  status)
        status -p ${pidfile} $httpd
    RETVAL=$?
    ;;
  restart)
    stop
    start
    ;;
  condrestart|try-restart)
    if status -p ${pidfile} $httpd >&/dev/null; then
        stop
        start
    fi
    ;;
  force-reload|reload)
        reload
    ;;
  graceful|help|configtest|fullstatus)
    $apachectl [email protected]
    RETVAL=$?
    ;;
  *)
    echo $"Usage: $prog {start|stop|restart|condrestart|try-restart|force-reload|reload|status|fullstatus|graceful|help|configtest}"
    RETVAL=2
esac
exit $RETVAL
#
# 而后为此脚本赋予执行权限:
chmod +x /etc/rc.d/init.d/httpd
#
# 加入服务列表:
chkconfig --add httpd
#
# mod_jk安装配置
tar xf tomcat-connectors-1.2.37-src.tar.gz
cd tomcat-connectors-1.2.37-src/native/
./configure --with-apxs=/usr/local/apache/bin/apxs
make && make install
#
# 启动httpd
service httpd start

# httpd安装好后需要观察如下模块是否已经就绪

iii) mod_jk(ajp协议)反代tomcat示例 (slave1.king.com)
vim /etc/httpd/extra/httpd-jk.conf
# Load the mod_jk
LoadModule  jk_module  modules/mod_jk.so
JkWorkersFile  /etc/httpd/extra/workers.properties
JkLogFile  logs/mod_jk.log
JkLogLevel  debug
JkMount  /*  tomcat1
JkMount  /status/  stat1
#
vim /etc/httpd/extra/workers.properties
worker.list=tomcat1,stat1
worker.tomcat1.port=8009
worker.tomcat1.host=172.16.43.2
worker.tomcat1.type=ajp13
worker.tomcat1.lbfactor=1
worker.stat1.type = status
#
vim /etc/httpd/httpd.conf
DirectoryIndex index.jsp  # 249行
Include /etc/httpd/extra/httpd-jk.conf # 446行
#
vim /usr/local/tomcat/conf/server.xml (slave2.king.com , slave3.king.com)
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">  # 103行
# 两个节点分别重启 httpd , tomcat 服务

# 测试, 此时基本的反代及status页面已经可以访问

iv) mod_proxy(http协议 , ajp协议)反代tomcat示例 (salve1.king.com)
# 在httpd.conf的全局配置段(Directory)或虚拟主机(VirtualHost)中添加如下内容:
ProxyVia Off
ProxyRequests Off
ProxyPreserveHost Off
<Proxy *>
  Require all granted
</Proxy>
  ProxyPass  /  ajp://172.16.43.2:8009/
  ProxyPassReverse  /  ajp://172.16.43.2:8009/
<Location  / >
  Require all granted
</Location>
#
# apache跟Tomcat的http连接器进行整合:
ProxyVia Off
ProxyRequests Off
ProxyPass / http://172.16.100.2:8080/
ProxyPassReverse / http://172.16.100.2:8080/
<Proxy *>
  Require all granted
</Proxy>
<Location  / >
  Require all granted
</Location>
#
# 基于session绑定均衡反代
ProxyRequests Off
<proxy balancer://lbcluster>
BalancerMember ajp://172.16.100.1:8009 loadfactor=10 route=tomcat1
BalancerMember ajp://172.16.100.2:8009 loadfactor=10 route=tomcat2
</proxy>
#
<VirtualHost *:80>
ServerName www.king.com
ProxyPass / balancer://lbcluster/ stickysession=JSESSIONID
ProxyPassReverse / balancer://lbcluster/
</VirtualHost>
#
# 为tomcat建立新的webapp用于测试 (slave2.king.com , slave3.king.com)
vim /usr/local/tomcat/conf/server.xml
<Context path="/testsession" docBase="/usr/local/tomcat/webapps/testsession" /> # 140行
#
# 测试页面 (slave2.king.com)
<%@ page language="java" %>
<html>
  <head><title>tomcat1</title></head>
  <body>
    <h1><font color="red">tomcat1.king.com</font></h1>
    <table align="centre" border="1">
      <tr>
        <td>Session ID</td>
    <% session.setAttribute("king.com","king.com"); %>
        <td><%= session.getId() %></td>
      </tr>
      <tr>
        <td>Created on</td>
        <td><%= session.getCreationTime() %></td>
     </tr>
    </table>
  </body>
</html>
#
# 测试页面 (salve3,king.com)
<%@ page language="java" %>
<html>
  <head><title>tomcat2</title></head>
  <body>
    <h1><font color="red">tomcat2.king.com</font></h1>
    <table align="centre" border="1">
      <tr>
        <td>Session ID</td>
    <% session.setAttribute("king.com","king.com"); %>
        <td><%= session.getId() %></td>
      </tr>
      <tr>
        <td>Created on</td>
        <td><%= session.getCreationTime() %></td>
     </tr>
    </table>
  </body>
</html>

# 测试, 使用不同浏览器将访问落在不同节点上,反复刷新不变则证明sticksession成功

tomcat的部署及session绑定反代,布布扣,bubuko.com

时间: 2024-11-03 21:25:12

tomcat的部署及session绑定反代的相关文章

nginx反代httpd,实现三种tomcat代理模型至后端的tomcat服务器,会话绑定的三种方式

构建tomcat集群,实现前端一台nginx反代,到后端的apache服务器,由apache负责向后端的tomcat服务器进行资源调度,这样的模式比直接用nginx反代到后端主机,tomcat服务器所受到的压力会更小,服务将会更加稳定,这样的模式是经过实践检验出来的.如果nginx直接调度到后端tomcat服务器,则只支持http和https,而不支持ajp,http与https模式的设定,可以让外来客户直接访问tomcat服务器,而不需要经过我们设置好的前端nginx的端口,这样是十分不安全的

Tomcat集群session复制,httpd/nginx反代Tomcat集群

   一个大型站点都会涉及到动态应用,动态应用都需要做会话保持,常见的会话保持方式就三种,一是session stick,二是session replication,三是session share,对于小型规模的tomcat集群,大多者会采用session replication方式,但阅读官方文档也好,查询大牛博客也罢,发现均有不准确之处,所以亲测成功实现之后得出如下文档,还望高人指点. 实验环境: 操作系统:CentOS 7.2 tomcat版本:tomcat-7.0.54(yum安装方式)

常见的nginx,apache反代用户请求至tomcat主机的实现方法

一.nginx+tomcat主机实现 1.主机规划 nginx主机 172.18.12.20 tomcat主机 172.18.12.21 2.安装tomcat主机并部署一个简单的测试页面 # yum install java-1.7.0-openjdk   java-1.7.0-openjdk-devel # vim /etc/profile.d/java.sh JAVA_HOME=/usr export JAVA_HOME # . /etc/profile.d/java.sh 3.安装tomc

httpd反代 + tomcat cluster + redis会话保持

版本说明: httpd版本:2.4.6 tomcat版本:7.0.69 dedis版本:3.2.3 操作系统版本:CentOS Linux release 7.3.1611 拓扑结构: tomcat-A/192.168.1.106 客户端------>httpd反向代理 ------->                                           ----- > redis会话保持服务器 192.168.1.101               tomcat-B/1

Http和Nginx反代至Tomcat(LNMT、LAMT)

Http和Nginx反代至Tomcat(LNMT.LAMT) ================================================================================ 概述: 本章将主要介绍Http和Nginx反代至Tomcat,具体内容如下: LNMT部署并实现动静分离 LAMT部署的实现方式: ·proxy_http_module代理配置 ·proxy_ajp_module代理配置 Tomcat脚本(启动.停止.重启) ========

nginx做前端反代负载均衡,后端httpd+tomcat

实验内容:用nginx做前端反代负载均衡后端httpd+tomcat 实验环境:物理机win7,虚拟机centos7: node1:172.18.11.111 httpd+tomcat node2:172.18.11.112 httpd+tomcat node3:172.18.11.113 nginx反代负载均衡 说明:httpd有两种方式与tomcat通信: (1)httpd可使用http模块反代tomcat,此时tomcat使用http链接器: (2)httpd还可使用ajp模块反代tomc

Nginx反代Tomcat项目

需求背景: 直接访问Tomcat项目路径如下: http://10.8.1.5:8080/erp 要求使用www.erp.com访问是可以访问至http://10.8.1.5:8080/erp 需求分析: 这里不可以使用简单的反向代理,因为后端服务器有目录(erp)存在,而为了访问友好www.erp.com后端不能加目录,所以不能纯粹的使用nginx根据目录来匹配后端服务器,最终实现效果nginx配置如下: server {     listen      80;     server_name

apache反代tomcat出现的问题

在centos6里使用httpd2.2版本,然后在/etc/httpd/conf.d/下定义配置文件反代至后端tomcat服务器,配置完成后重新启动httpd并访问,出现了500的错误代码,查看httpd的错误访问日志,显示如下信息: configuration error:  couldn't perform authentication. AuthType not set!: /favicon.ico, referer: http://192.168.25.129/ 说明配置文件里授权的部分

nginx+tomcat+memcache+session绑定

节点信息 节点1 ip:172.16.30.1 nginx 节点101 ip:172.16.30.101 tomcat 节点102 ip:172.16.30.102 tomcat 通过nginx代理访问后端tomcat,并实现memcache的会话绑定,即同一个浏览器访问得到的session结果是一样的 1.节点1安装nginx [[email protected] ~]# yum install -y nginx 1.1.启动nginx测试 [[email protected] ~]# ser