tomcat runing on daemon with apr and ssl mode

前言:

簡要介紹下tomcat 的三種運行模式,記錄基於apr模式及支持SSL模式的安裝方式


環境:

本文主要基於ubuntu 安裝tomcat 7,與基於centos並無太大差異,主要差異在於相關依賴包的名稱,在此會給出centos 所需的依賴包名稱。


模式簡介:

BIO模式:阻塞試I/O操作,表示Tomcat 使用傳統java I/O 操作(即java.io包及其子包)。tomcat7及以下版本默認以bio模式運行,由於每個請求都要創建一個線程來處理,線程開銷較大,不能處理高併發場景,在三種模式中性能最低。

NIO模式:是Java SE 1.4及後續版本提供的一種新的I/O 操作方式(即java.nio包及其子包)。是一個基於緩衝區、並能提供非阻塞I/O 操作的Java API,它擁有比傳統I/O (bio)更好的併發運行性能。 如使用NIO模式,需將server.xml內protocol值配置爲如下值:

<Connector port="8080" 
           protocol="org.apache.coyote.http11.Http11NioProtocol"
           connectionTimeout="20000"
           redirectPort="8443" />

默認爲:

<Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443" />


注:tomcat 8 以上版本默認使用NIO模式,無需修改。


APR模式:簡單理解,就是從操作系統級別解決異步IO問題,大幅度的提高服務器的處理和響應性能,也是tomcat運行高併發應用的首選模式。

下面介紹具體啓用APR方式。


啓用APR模式

在官方下載tomat 7,並解壓到安裝路徑/usr/local/tomcat/,下載解壓過程略


ubuntu 依賴包:

APR 1.2+ development headers (libapr1-dev package)
OpenSSL 0.9.7+ development headers (libssl-dev package)
JNI headers from Java compatible JDK 1.4+
GNU development environment (gcc, make)

centos 依賴包:

gcc
make
openssl-devel   
apr-devel
apr-util-devel

安裝相關依賴:

apt-get install libapr1-dev libssl-dev gcc make openjdk-8-jdk -y

安裝APR動態庫:

apr相關源碼已包含在tomcat包內,bin目錄下tomcat-native.tar.gz文件

cd /usr/local/tomcat/bin
tar zxf tomcat-native.tar.gz
cd tomcat-native-1.2.10-src/native

配置編譯APR:

./configure --libdir=/usr/lib \
--prefix=/usr/local/tomcat/ \
--with-apr=/usr/bin/apr-1-config \
--with-java-home=/usr/lib/jvm/java-8-openjdk-amd64 \
--with-ssl=yes
make && make install

至此,如不啓用SSL,那tomcat已可以運行在APR模式了,若仍運行在BIO或NIO模式下,請修改server.xml配置文件,將protocol值配置爲如下值

<Connector protocol="org.apache.coyote.http11.Http11Protocol"
           port="8080" .../>


基於SSL的APR模式:

若要讓tomcat SSL運行在APR模式上,需要配置SSL證書,此證書可購買、申請/生成免費版本或自簽發。此文利用自簽發證書配置實驗。

簽發證書:

openssl genrsa -des3 -out tomcat.key 1024
openssl rsa -in tomcat.key -out tomcat_np.key
openssl req -new -key tomcat_np.key -out tomcat.csr
openssl x509 -req -days 365 -in tomcat.csr -signkey tomcat_np.key \
-out tomcat.crt

配置server.xml爲如下值

<Connector port="8443" protocol="org.apache.coyote.http11.Http11AprProtocol"
           maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
           SSLCertificateFile="${catalina.base}/conf/tomcat.crt"
           SSLCertificateKeyFile="${catalina.base}/conf/tomcat_np.key"
           SSLVerifyClient="optional" SSLProtocol="TLSv1+TLSv1.1+TLSv1.2"
/>



至此,tomcat在SSL和非SSL下都是運行在APR模式上,但還有一個問題,就是現在tomcat是運行在root 用戶上的,下面介紹如何使tomcat 運行在非root 用戶下,即以daemon模式運行。


基於daemon運行tomcat:

tomcat 二進制包提供了daemon腳本,但是基於jsvc實現的,因此需要編譯commons-daemon-native.tar.gz包內容,生成jsvc執行文件

安裝jsvc

cd /usr/local/tomcat
tar zxf commons-daemon-native.tar.gz
cd commons-daemon-1.0.15-native-src/unix
./configure --with-java=/usr/lib/jvm/java-8-openjdk-amd64/
make

make後便會在tomcat/bin下面生成jsvc文件


建立運行tomcat用戶

useradd tomcat -M -d / -s /usr/sbin/nologin

編輯daemon.sh配置如下值

test ".$TOMCAT_USER" = . && TOMCAT_USER=tomcat
# Set JAVA_HOME to working JDK or JRE
JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
# If not set we'll try to guess the JAVA_HOME


在daemon.sh腳本第二行添加

# chkconfig: - 80 20

修改相關目錄權限

chown -R tomcat.tomcat /usr/local/tomcat

添加系統服務

ln -s /usr/local/tomcat/bin/daemon.sh /etc/init.d/tomcat
chkconfig tomcat on


至此,SSL APR daemon三種需求均已實現

如若做對tomcat做多實例,尚需對daemon.sh腳本進行修改


驗證APR

tail logs/catalina-daemon.out 
一月 05, 2017 5:31:37 下午 org.apache.coyote.AbstractProtocol start
信息: Starting ProtocolHandler ["http-apr-8080"]
一月 05, 2017 5:31:37 下午 org.apache.coyote.AbstractProtocol start
信息: Starting ProtocolHandler ["http-apr-8443"]
一月 05, 2017 5:31:37 下午 org.apache.coyote.AbstractProtocol start
信息: Starting ProtocolHandler ["ajp-apr-8009"]
一月 05, 2017 5:31:37 下午 org.apache.catalina.startup.Catalina start
信息: Server startup in 852 ms

  驗證daemon

ps -ef | grep tomcat
tomcat    55158  55157  0 17:31 ?        00:00:13 jsvc.exec -java-home 
/usr/lib/jvm/java-8-openjdk-amd64 -user tomcat -pidfile 
/usr/local/tomcat/logs/catalina-daemon.pid -wait 10 
-outfile /usr/local/tomcat/logs/catalina-daemon.out 
-errfile &1 -classpath /usr/local/tomcat/bin/bootstrap.jar:
/usr/local/tomcat/bin/commons-daemon.jar:
/usr/local/tomcat/bin/tomcat-juli.jar 
-Djava.util.logging.config.file=
/usr/local/tomcat/conf/logging.properties 
-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager 
-Djava.endorsed.dirs= -Dcatalina.base=/usr/local/tomcat 
-Dcatalina.home=/usr/local/tomcat 
-Djava.io.tmpdir=/usr/local/tomcat/temp 
org.apache.catalina.startup.Bootstrap

  

參考

http://tomcat.apache.org/tomcat-7.0-doc/ssl-howto.html

http://blog.csdn.net/xyang81/article/details/51502766                                                             

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章