apache tomcat ajp mod jk
環境
系統:centos 7.3
Apache:2.4.27
Modjk:1.2.42
Tomcat:8.5
Jdk:1.8.92
Apr:1.6.2
Apr-util:1.6.0
關閉所有防火墻和selinux
systemctlstop firewalld serviceiptables stop setenforce0
一、安裝Apache
1、 安裝依賴
yum -y install wget gcc gcc-c++ncurses ncurses-devel cmake make perl bison openssl openssl-devel gcc* libxml2libxml2-devel curl-devel libjpeg* libpng* freetype* pcre-devel bzip2-devellibmcrypt-devel libmhash libexpat1 libexpat1-dev
2、 安裝apr
tar xzvf apr-1.6.2.tar.gz ;cdapr-1.6.2; ./configure--prefix=/usr/local/apr make && make install
3、 安裝apr-util
tar xzvf apr-util-1.6.0.tar.gz ;cdapr-util-1.6.0 ./configure--prefix=/usr/local/apr-util --with-apr=/usr/local/apr/ make && make install
4、 安裝apache2.4
tar xzvf httpd-2.4.27.tar.gz ;cdhttpd-2.4.27
編譯apache之前要把解壓後的apr和apr-util復制一分到apache解壓後的源碼目錄中的srclib子目錄一,不然會報錯。configure: error: BundledAPR requested but not found at ./srclib/. Download and unpack the correspondingapr and apr-util packages to ./srclib/.
cp -a apr-1.6.2httpd-2.4.27/srclib/apr cp -a apr-util-1.6.0httpd-2.4.27/srclib/apr-util ./configure--prefix=/usr/local/apache --with-included-apr --enable-so--enable-deflate=shared --enable-expires=shared --enable-rewrite=shared--enable-static-support --with-mpm=worker --disable-userdir--enable-proxy-balancer --enable-proxy-http--enable-proxy-connect --enable-proxy --enable-rewrite--enable-proxy-ajp make && make install
5、 安裝mod jk
tar xzvftomcat-connectors-1.2.42-src.tar.gz ;cd tomcat-connectors-1.2.42-src/native ./configure--with-apxs=/usr/local/apache/bin/apxs make && make install
二、安裝Tomcat
1、 安裝jdk
rpm -ivhjdk-8u92-linux-x64.rpm
2、 安裝和配置tomcat
tar xzvfapache-tomcat-8.5.15.tar.gz -C /usr/local/
解壓兩個tomcat,分別命名為tomcat1 tomcat2
因為我們在同一臺機上實驗,所以要修改第二個tomcat的http和ajp端口,避免端口沖突。這裏不再敘述
修改server.xml如下幾個地方
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">
這裏添加一個tomcat1,作為等下mod jk轉發的路由,另一臺為tomcat2
<Host name="localhost" appBase="" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"> <Context path="" docBase="/www/1" debug="0"reloadable="false" crossContext="true" />
這裏定義程序網站根目錄
<ValveclassName="org.apache.catalina.valves.AccessLogValve"directory="logs" prefix="localhost_access_log."suffix=".txt" pattern="common"resolveHosts="false"/>
這裏定義日誌和格式
3、 啟動tomcat
sh /usr/local/tomcat1/bin/catalina.sh start sh /usr/local/tomcat2/bin/catalina.sh start
測試兩個tomcat是否能正常訪問,返回200為正常,也可用瀏覽測試。根據自己改的端口來測試。
curl -I192.168.2.72:8080 curl -I192.168.2.72:8180
三、配置Apache mod jk轉發
1、在httpd.conf中找到LoadModule添加
LoadModule jk_module modules/mod_jk.so
打開和添加如下兩行,打開vhost和mod_jk的配置
Include conf/extra/httpd-vhosts.conf Include conf/mod_jk.conf
2、在apache的conf目錄下創建mod_jk.conf
#cat mod_jk.conf
JkWorkersFileconf/workers.properties JkLogFile/usr/local/apache/logs/jk.log JkShmFile/usr/local/apache/logs/jk-runtime-status JkLogLevelerror JkLogStampFormat"[%d %H:%M:%S] " JkOptions+ForwardKeySize +ForwardURICompat -ForwardDirectories JkRequestLogFormat"%w %V %U%q %s %T"
3、創建workers.properties文件
# cat workers.properties
worker.list=controller,tomcat1,tomcat2 # tomcat1 worker.tomcat1.port=8009 worker.tomcat1.host=127.0.0.1 worker.tomcat1.type=ajp13 worker.tomcat1.lbfactor=1 worker.tomcat1.connection_pool_size=500 worker.tomcat1.connection_pool_minsize=25 worker.tomcat1.connection_pool_timeout=300 worker.tomcat1.socket_timeout=20 worker.tomcat2.port=8109 worker.tomcat2.host=127.0.0.1 worker.tomcat2.type=ajp13 worker.tomcat2.lbfactor=1 worker.tomcat2.connection_pool_size=500 worker.tomcat2.connection_pool_minsize=25 worker.tomcat2.connection_pool_timeout=300 worker.tomcat2.socket_timeout=20 #========controllertomcat online ======= worker.controller.type=lb worker.controller.balanced_workers=tomcat1,tomcat2 worker.controller.sticky_session=1 worker.controller.connection_pool_size=1000 worker.controller.connection_pool_minsize=50 worker.controller.connection_pool_timeout=300 worker.controller.socket_timeout=20
4、配置httpd-vhosts.conf
<VirtualHost*:80> ServerName www.yy.com DocumentRoot "/www/1" ErrorLog "logs/yy-error_log" CustomLog"logs/yy-access_log" common JkMount /*.html* controller JkMount /*.tt* controller JkMount /*.index* controller <Directory /> AllowOverride none Options -Indexes AllowOverride All Require all granted </Directory> </VirtualHost>
[[email protected] www]# ls 1 2 [[email protected] www]# ls * 1: 1.tt index.html 2: 1.tt index.html
/www/1和/www/2分別是tomcat1 和tomcat2的根目錄。裏面放置一樣的文件名,但內容不同。然後刷新瀏覽器,看內容是否會不停變化,如果會就主明轉發成功了。
JkMount /*.html* controller
這個是定義所有.html的請求都轉發到tomcat處理,這裏是實驗,生產中應該把動太內容發給tomcat處理,如jsp等。
本文出自 “蒲公英的秘密” 博客,請務必保留此出處http://yylinfan.blog.51cto.com/8670422/1953594
apache tomcat ajp mod jk