0x01  JDK和Tomcat安装

到oracle官网下载jdk,当前下载的版本是Linux x64 jdk-8u101-linux-x64.tar.gz

到apache官网下载tomcat,当前最新版本 Tomcat 8.5.4 Released

jdk和apache的安装都十分简单(这里不是采用源码编译,就像在windows上使用绿色软件那么方便),将下载的文件解压即可使用,然后引入几个环境变量就算是完成了。tomcat是使用java开发的,所以依赖于jdk。使用下面两个命令可以检测安装后是否正常使用。

[root@localhost tomcat]# java -version
java version "1.8.0_101"
Java(TM) SE Runtime Environment (build 1.8.0_101-b13)
Java HotSpot(TM) -Bit Server VM (build 25.101-b13, mixed mode)
[root@localhost tomcat]# catalina -h
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/local/jdk
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 current window
run -security Start in the current window with security manager
start Start Catalina in a separate window
start -security Start in a separate window with security manager
stop Stop Catalina, waiting up to seconds for the process to end
stop n Stop Catalina, waiting up to n seconds for the process to end
stop -force Stop Catalina, wait up to seconds and then use kill -KILL if still running
stop n -force Stop Catalina, wait up to n seconds and then 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 you running?
Note: Waiting for the process to end and use of the -force option require that $CATALINA_PID is defined

0x02  tomcat-users.xml

启用host manager功能:
编辑tomcat-user.xml,添加如下行:
<role rolename="manager-gui"/>                       #定义角色
<user username="tomcat" password="secret" roles="admin-gui"/>       #将用户加入上面所定义的角色中

而后重启tomcat。

启用Manager App和server status功能:
<role rolename="admin-gui"/>
<user username="tomcat" password="s3cret" roles="admin-gui"/>

注意:tomcat首页的三个管理功能需要在本机登录。

0x03  配置APR

使用catalina.sh configtest 发现如下报错,查询得知这是没有配置apr

INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: /usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib

apr是什么?官方文档有简介,按照官方http://tomcat.apache.org/tomcat-8.5-doc/apr.html文档,需要APR, OpenSSL,tomcat-native(在tomcat的bin目录下)

1、安装apr

apr-devel 使用源码安装,第一次使用yum install apr-devel安装的在编译的native无法报错,后来使用源码。

 

2、安装openssl

        出现错误:configure: error: Your version of OpenSSL is not compatible with this version of tcnative

在openssl官网下载新版本的openssl 2016-May-03 13:57:13 openssl-1.0.2h.tar.gz 编译安装后再进行tomcat-native的安装

[root@localhost local]# tar zxf openssl-1.0.2h.tar.gz
[root@localhost openssl-1.0.2h-src]# ./config –prefix=/usr/local/openssl –fPIC #加上-fPIC参数,否则编译native的时候会报错,如附一
[root@localhost openssl-1.0.2h-src]# make
[root@localhost openssl-1.0.2h-src]#make install

        附一:编译native报错

/usr/local/openssl/lib/libssl.a(s3_meth.o): relocation R_X86_64_32 against `.rodata' can not be used when making a shared object; recompile with –fPIC
       /usr/local/openssl/lib/libssl.a: could not read symbols: Bad value
       collect2: error: ld returned 1 exit status
       make[1]: *** [libtcnative-1.la] Error 1
       make[1]: Leaving directory `/usr/local/tomcat-native-1.2.8-src/native'
       make: *** [all-recursive] Error 1

       在重新config之后,会提示使用make depend可以忽略,如下

*** Because of configuration changes, you MUST do the following before
       *** building:

make depend

3、安装native

[root@localhost openssl-1.0.2h-src]#cd /usr/local/tomcat-native-1.2.-src/
[root@localhost tomcat-native-1.2.-src]# cd native/
[root@localhost native]#./configure --prefix=/usr/local/tomcat-native --with-apr=/usr/bin/ --with-java-home=/usr/local/jdk --with-ssl=/usr/local/openssl
[root@localhost native]#make
[root@localhost native]#make install

最后,将安装成功后的tomcat-native的lib目录下的文件复制一份到上述报错所包含的任一目录(/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib),这里我试过把整个lib做个软链接到这些目录下面,可是居然还是无法找到,所以最后还是直接复制了。

此时使用catalina configtest 完整的提示如下

[root@localhost local]# catalina configtest
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/local/jdk
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
……
Aug ,  :: PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Command line argument: -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
Aug , :: PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Command line argument: -Djdk.tls.ephemeralDHKeySize=
Aug , :: PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Command line argument: -Dcatalina.base=/usr/local/tomcat
Aug , :: PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Command line argument: -Dcatalina.home=/usr/local/tomcat
Aug , :: PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Command line argument: -Djava.io.tmpdir=/usr/local/tomcat/temp
Aug , :: PM org.apache.catalina.core.AprLifecycleListener lifecycleEvent
INFO: Loaded APR based Apache Tomcat Native library 1.2. using APR version 1.5.. #可以看到这里的native和apr已经被识别了
Aug , :: PM org.apache.catalina.core.AprLifecycleListener lifecycleEvent
INFO: APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true].
Aug , :: PM org.apache.catalina.core.AprLifecycleListener lifecycleEvent
INFO: APR/OpenSSL configuration: useAprConnector [false], useOpenSSL [true]
Aug , :: PM org.apache.catalina.core.AprLifecycleListener initializeSSL
INFO: OpenSSL successfully initialized (OpenSSL 1.0.2h May )
Aug , :: PM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["http-nio-8080"]
Aug , :: PM org.apache.tomcat.util.net.NioSelectorPool getSharedSelector
INFO: Using a shared selector for servlet write/read
Aug , :: PM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["ajp-nio-8009"]
Aug , :: PM org.apache.tomcat.util.net.NioSelectorPool getSharedSelector
INFO: Using a shared selector for servlet write/read
Aug , :: PM org.apache.catalina.startup.Catalina load
INFO: Initialization processed in ms

0x04  tomcat目录结构

├── bin                      执行文件bat为在windows下运行的,sh是linux下执行的
│   ├── bootstrap.jar
│   ├── catalina.bat
│   ├── catalina.sh     主要的执行程序,具有的若干个参数功能是通过调用此目录下的其他脚本实现
│   ├── shutdown.bat
│   ├── shutdown.sh
│   ├── startup.bat
│   ├── startup.sh
│   ├── version.bat
│   └── version.sh
├── conf                    配置文件目录
│   ├── catalina.policy
│   ├── catalina.properties
│   ├── context.xml
│   ├── logging.properties
│   ├── server.xml
│   ├── tomcat-users.xml
│   └── web.xml
├── lib                     包含Tomcat使用的jar文件,unix平台此目录下的任何文件都被加到Tomcat的classpath中
│   ├── annotations-api.jar
│   ├── catalina-ant.jar
│   ├── ……
├── logs                   Tomcat摆放日志文件的地方。
│   ├── catalina.log
│   ├── catalina.out
│   ├── host-manager.log
│   ├── localhost.log
│   ├── localhost_access_log.txt
│   └── manager.log
├── temp                JSP转化成Servlet存放的位置
│   └── safeToDelete.tmp
├── webapps
│   ├── docs
│   ├── examples
│   ├── host-manager
│   ├── manager
│   └── ROOT
└── work                存放JSP编译后产生的class文件        
    └── Catalina

0x05  Apache+Tomcat(一)

Apache与Tomcat的整合方式有两种,主要依靠apache的两个模块(mod_jk,mod_proxy)。两种模块都可以通过ajp,http/https协议与tomcat进行通信,但是一般mod_jk都使用ajp协议,并且mod_jk需要自行下载安装,而mod_proxy模块apache2.2之后,默认就带上。

从mod_proxy相关模块名称(mod_proxy_http,mod_proxy_ajp)可以发现http和ajp等是建立在proxy之上的,是单独的模块。

本次使用光盘自带的Apache/2.4.6 yum安装,默认情况下已经载入了相关模块。

ProxyVia on
ProxyRequests off #关闭正向代理
ProxyPreserveHost on #保留Http请求的Host头部 ProxyPass / http://172.16.4.22:8080/
ProxyPassReverse / http://172.16.4.22:8080/

上述使用的是mod_proxy模块以http方式代理,同理也可以使用ajp方式

ProxyPass / ajp://172.16.4.22:8080/
ProxyPassReverse / ajp://172.16.4.22:8080/

注意:

1、关闭firewall防火墙,保证apache能够访问正常。

2、没有关闭selinux,时出现了如下错误。

[mpm_prefork:notice] [pid ] AH00170: caught SIGWINCH, shutting down gracefully
[core:notice] [pid ] SELinux policy enabled; httpd running as context system_u:system_r:httpd_t:s0
[suexec:notice] [pid ] AH01232: suEXEC mechanism enabled (wrapper: /usr/sbin/suexec)
[auth_digest:notice] [pid ] AH01757: generating secret for digest authentication ...
[lbmethod_heartbeat:notice] [pid ] AH02282: No slotmem from mod_heartmonitor
[mpm_prefork:notice] [pid ] AH00163: Apache/2.4. (CentOS) PHP/5.4. configured -- resuming normal operations
[core:notice] [pid ] AH00094: Command line: '/usr/sbin/httpd -D FOREGROUND'
[proxy:error] [pid ] ()Permission denied: AH00957: HTTP: attempt to connect to 172.16.4.22: (172.16.4.22) failed
[proxy:error] [pid ] AH00959: ap_proxy_connect_backend disabling worker for (172.16.4.22) for 60s
[proxy_http:error] [pid ] [client 172.16.4.81:] AH01114: HTTP: failed to make connection to backend: 172.16.4.2

3、出现如下错误是因为ProxyPass 和 ProxyPassReverse 后面的ip:port需要加“/”。

[proxy:error] [pid ] [client 172.16.4.81:] AH00898: DNS lookup failure for: 172.16.4.22:8080tomcat.png returned by /tomcat.png, referer: http://172.16.4.22/
[proxy:error] [pid ] [client 172.16.4.81:] AH00898: DNS lookup failure for: 172.16.4.22:8080tomcat.css returned by /tomcat.css, referer: http://172.16.4.22/

0x06  Apache+Tomcat(二)

使用mod_jk模块,先在官网下载Connectors,JK 1.2.41 Source Release tar.gz

AJP(Apache JServ Protocol):AJP是面向数据包的基于TCP/IP的协议,它在Apache和Tomcat的实例之间提供了一个专用的通信信道。mod_proxy只有在apache 2.2.x系列的版本才直接提供,而对于apache 1.3.x和2.0.x来说mod_jk才更适用。

1、编译安装apache的mod_jk模块

[root@localhost ~]# tar -zxf tomcat-connectors-1.2.-src.tar.gz -C /usr/local/
[root@localhost ~]# cd /usr/local/tomcat-connectors-1.2.-src/native
[root@localhost native]# ./configure --with-apxs=/usr/bin/apxs #编译第三方httpd模块需要用到apxs(在httpd-devel包中)
[root@localhost native]#make && make install

2、配置httpd

安装完mod_jk之后,需要配置httpd代理至tomcat的功能。为了便于维护在httpd/conf.d/新增单独配置文件。

LoadModule jk_module modules/mod_jk.so
JKWorkersFile /etc/httpd/conf.d/workers.properties
JKLogFile /var/logs/httpd/mod_jk.log
JKLogLevel info
JKMount /* Tomcat #Tomcat和stat是一个在workers.properties定义的名称,与mod_proxy不同的是这里的根需要“/*”
JKMount /status stat #后面的自定名称,称为jvmRoute

新增workers.properties文件,对于apache代理来说,每一个后端的Tomcat实例中的engine都可以视作一个worker,而每一个worker的地址、连接器的端口等信息都需要在apache端指定以便apache可以识别并使用这些worker。可以理解一个worker相当于一个在httpd后端的tomcat的实例或者是。

worker.list=Tomcat,stat         #名称列表
worker.TomcatA.port= #每个名称的具体属性
worker.TomcatA.host=172.16.4.1
worker.TomcatA.type=ajp13 #类型有三种,表明后端服务是如何工作。
worker.TomcatA.lbfactor=
worker.stat.type = status

worker类型:

ajp:当前worker为一个运行着的Tomcat实例
        lb:即load balancing,专用于负载均衡场景中的woker;此worker并不真正负责处理用户请求,而是将用户请求调度给其它类型为ajp13的worker,有专用的属性配置
        status:用户显示分布式环境中各实际worker工作状态的特殊worker,它不处理任何请求,也不关联到任何实际工作的worker实例

各类型worker通用属性:

host:Tomcat 的worker实例所在的主机;
        port:Tomcat 实例上AJP1.3连接器的端口;
        connection_pool_minsize:最少要保存在连接池中的连接的个数;默认为pool_size/2;
        connection_pool_timeout:连接池中连接的超时时长;
        mount:由当前worker提供的context路径,如果有多个则使用空格格开;此属性可以由JkMount指令替代;
        retries:错误发生时的重试次数;
        socket_timeout:mod_jk等待worker响应的时长,默认为0,即无限等待;
        socket_keepalive:是否启用keep alive的功能,1表示启用,0表示禁用;
        lbfactor:worker的权重,可以在负载均衡的应用场景中为worker定义此属性;

tomcat(三)--基本安装配置的更多相关文章

  1. Linux Tomcat 6.0安装配置实践总结

    系统环境: Red Hat Enterprise Linux Server release 5.7 (Tikanga)  64位 Tomcat下载 从官方网站 http://tomcat.apache ...

  2. apache tomcat的下载 安装 配置

    大家好!欢迎浏览我的博客 我们现在学习怎么下载,安装,配置apache-tomcat. 首先我们先了解一下Tomcat,Tomcat是Apache 软件基金会(Apache Software Foun ...

  3. Tomcat的免安装配置

    Tomcat免安装配置 以下配置说明全部针对免安装版本 基于tomcat的安装目录和运行目录是可以不同的,本文都会进行说明 首先简单介绍一下tomcat的目录结构,一般情况下,tomcat包括以下子目 ...

  4. tomcat和mysql安装配置总结

    我安装的tomcat和mysql都是解压缩版的.安装和配置tomcat倒没花费我多少时间,主要是mysql,几乎花费了我一天的时间. Tomcat安装总结: 首先将下载好的tomcat压缩包解压放在其 ...

  5. Tomcat服务器的安装配置图文教程(推荐)

    现在将使用Tomcat的一些经验和心得写到这里,作为记录和备忘.如果有朋友看到,也请不吝赐教. 1.首先是Tomcat的获取和安装. 获取当然得上Apache的官方网站下载,开源免费,而且带宽也足够. ...

  6. 【开发工具安装配置】MyEclipse,Tomcat,Mysql安装配置

    配置步骤 注:以下路径仅供参考! 一.MyEclipse10 1. 1 破解版破解说明: (1)下载安装好Myeclipse,先不要运行. (2)打开破解工具目录下的cracker.jar文件或run ...

  7. Tomcat 9.0安装配置

    本文转自:http://blog.sina.com.cn/s/blog_15126e2170102w5o8.html 一.JDK的安装与配置 1.从官网下载jdk,注意是jdk不是jre.最好从官网下 ...

  8. 基于Python的Webservice开发(三)-Django安装配置

    一.安装Django pip install django 二.创建项目 进入指定的目录后 django-admin startproject WebApi 目录说明: WebApi 项目的容器. m ...

  9. Tomcat 9.0 安装配置

    本文转自:http://blog.sina.com.cn/s/blog_15126e2170102w5o8.html 一.JDK的安装与配置 1.从官网下载jdk,注意是jdk不是jre.最好从官网下 ...

  10. MYSQL + MHA +keepalive + VIP安装配置(三)--keepalived安装配置

    一.概述 keepalived介绍:Keepalived的作用是检测web服务器的状态,如果有一台web服务器死机,或工作出现故障,Keepalived将检测到,并将有故障的web 服务器从系统中剔除 ...

随机推荐

  1. How secure FB Messenger is?

    It's reported that FB Messenge is the most secure App for instant messaging service. Let's see if FB ...

  2. mongodb ubuntu下自启动

    个人测试开发的时经常会采用shell 启动mongodb,当进入项目团队开发测试时,必须让mongodb可以随系统自启动. 1.编写启动命令 sudo vim /etc/rc/local 1-1 mo ...

  3. 关键字sizeof---常年被人误认为函数

    sizeof 是关键字不是函数, sample: int  i=0; A)  sizeof(int);  B) sizeof(i);  C)sizeof  int;   D)sizeof  i; C) ...

  4. opencv嫁接vlfeat densesift

    #include <opencv2/opencv.hpp> #include <iostream> extern "C" { #include <vl ...

  5. Centos下安装Mongodb

    转自:http://nnzhp.cn/article/10/ Mongodb是一种nosql类型的数据库,高性能.易部署.易使用的特点在IT行业非常流行. 下面介绍一下mongodb的安装方式,这里我 ...

  6. nodeJS环境

    nodeJS官网:https://nodejs.org/en/,  npm官网(node package manager):https://www.npmjs.com/ 进入nodejs官方网站下载软 ...

  7. Oracle 创建dblink

    创建dblink语法: create database link link名称 connect to 对方数据库用户名 identified by 对方数据库用户密码  using '对方数据库ip: ...

  8. ulimit

    .修改ulimit vim /etc/security/limits.conf * soft nproc * hard nproc * soft nofile * hard nofile vim /e ...

  9. loadrunner ---模拟多IP登录

    1.打开HP LoadRunner ->Tools ->IP Wizard

  10. Finish 和 Complete 的区别

    2012年,在伦敦举行的语言大赛中,圭亚那选手Samsunder Balgobin 在回答比赛中最后一道问题   "你如何用一种容易让人理解的方式解释 complete与finished 的区別"时, ...