Apache Tomcat-Connectors
JDK 安裝
# yum -y install httpd-devel java-1.6.0-openjdk java-1.6.0-openjdk-devel
設定環境變數
#vi /etc/profile
export JAVA_HOME=/usr/lib/jvm/java-1.6.0
export PATH=#PATH:#JAVA_HOME/bin
export CLASSPATH=.:#JAVA_HOME/lib/tools.jar:#JAVA_HOME/lib/dt.jar
|
#. /etc/profile
#echo #JAVA_HOME
Apache modules(tomcat-connectors) JDK
安裝解壓縮tomcat-connectors
#tar –zxf tomcat-connectors-1.2.32-src.tar.gz
#cd tomcat-connectors-1.2.32-src.tar.gz/native
#./configure --with-java-home=/usr/lib/jvm/java-1.6.0 --with-apxs=/usr/sbin/apxs
#make
#cd apache-2.0
#sudo cp mod_jk.so /etc/httpd/modules/
#sudo cp httpd.conf backup_httpd.conf //備份httpd.conf
LoadModule jk_module modules/mod_jk.so
Include conf/mod_jk.conf
|
在httpd/conf 底下新增mod_jk.conf ,workers.properties
#sudo vi mod_jk.conf
JkWorkersFile conf/workers.properties
JkLogFile /var/log/jk.log
JkShmFile /var/log/jk-runtime-status
JkLogLevel info
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories
JkRequestLogFormat "%w %V %T"
|
#sudo vi workers.properties
worker.list=a
worker.a.port=8009
worker.a.host=192.168.2.119
worker.a.type=ajp13
|
注意:WORKER 名稱 A 要和Tomcat jvmRouter 名一樣。
開啟Apache Virtual Host 功能,並設定Tomcat 路徑
#sudo vi /etc/httpd/conf/httpd.conf
#NameVirtualHost *:80 把#拿掉,並在最下面加入
<VirtualHost *:80>
ServerName web
DocumentRoot "/var/www/html/web"
JKMount /web/* a
JKMount /web a
</VirtualHost>
|
注意:JKMount /web/* a 說明webapps 有一個web資料夾、預設使用ROOT資料夾
JKMount /* a 和 JKMount / a 指向Tomcat/webapps/ROOT
設定Tomcat 網頁路徑
#sudo mkdir /var/www/html/web
#sudo vi /index.html
<html>
<head>
<meta http-equiv="REFRESH" content="0;url=/web">
</head>
</html>
|
修改tomcat server.xml
#vim /home…./conf/server.xml
第102行 加入 jvmRoute="antepoker"
<Engine name="Catalina" defaultHost="localhost" jvmRoute="antepoker">
|
修改資料夾
#mv /home/tomcat/tomcat/webapps/ROOT /home/tomcat/webapps/web
備份首頁
#cp -a /home/tomcat/tomcat/webapps/web/index.jsp ~/
更改首頁
#rm /home/tomcat/tomcat/webapps/web/index.jsp
#vim /home/tomcat/tomcat/webapps/web/index.jsp
<html>
<body>
<h1>Test Tomcat7.0</h1>
</body>
</html>
|
測試Tomcat
url:IP
Virtual Host 多個Tomcat 設定
#sudo vi workers.properties
worker.list=a,b,c
worker.a.port=8009
worker.a.host=192.168.2.119
worker.a.type=ajp13
worker.b.port=8010
worker.b.host=192.168.2.119
worker.b.type=ajp13
worker.c.port=8011
worker.c.host=192.168.2.119
worker.c.type=ajp13
|
方法一:有三個不同的Tomcat
#vi /etc/httpd/conf/httpd.conf
#NameVirtualHost *:80 把#拿掉,並在最下面加入
<VirtualHost *:80>
ServerName xyz.com
JKMount /* a
JKMount / a
</VirtualHost>
<VirtualHost *:80>
ServerName ah.xyz.com
JKMount /* b
JKMount / b
</VirtualHost>
<VirtualHost *:80>
ServerName ag.xyz.com
JKMount /* c
JKMount / c
</VirtualHost>
|
設定DNS
#vi /etc/hosts
192.168.2.153 xyz.com
192.168.2.153 ah.xyz.com
192.168.2.153 ag.xyz.com
|
設定Tomcat
#vi /tomcat2/conf/server.xml
<Server port="8006" shutdown="SHUTDOWN">
<Connector port="8081" protocol="HTTP/1.1"
<Connector port="8010" protocol="AJP/1.3" redirectPort="8443" />
|
#vi /tomcat3/conf/server.xml
<Server port="8007" shutdown="SHUTDOWN">
<Connector port="8082" protocol="HTTP/1.1"
<Connector port="8011" protocol="AJP/1.3" redirectPort="8443" />
|
開啟Tomcat
#/home/osspc21/tomcat1/bin/start.sh
#/home/osspc21/tomcat2/bin/start.sh
#/home/osspc21/tomcat3/bin/start.sh
設定windows DNS
C:\Windows\System32\drivers\etc\hosts
192.168.2.153 xyz.com
192.168.2.153 ah.xyz.com
192.168.2.153 ag.xyz.com
|
測試 URL:
xyz.com point to tomcat1
ah.xyz.com point to tomcat2
ag.xyz.com point to tomcat3
方法二:一個Tomcat有三個webapps
#httpd.conf
#NameVirtualHost *:80 把#拿掉,並在最下面加入
<VirtualHost *:80>
ServerName xyz.com
DocumentRoot "/var/www/html/weba"
JKMount /app1/* a
JKMount /app1 a
</VirtualHost>
<VirtualHost *:80>
ServerName ah.xyz.com
DocumentRoot "/var/www/html/webb"
JKMount /app2/* b
JKMount /app2 b
</VirtualHost>
<VirtualHost *:80>
ServerName ag.xyz.com
DocumentRoot "/var/www/html/webc"
JKMount /app3/* c
JKMount /app3 c
</VirtualHost>
|
部屬tomcat app
#cp-R /tomcat1/webapps/ROOT /tomcat1/webapps/app1
#cp-R /tomcat1/webapps/ROOT /tomcat1/webapps/app2
#cp-R /tomcat1/webapps/ROOT /tomcat1/webapps/app3
設定指向index.html
#mkdir /var/www/html/weba
#mkdir /var/www/html/webb
#mkdir /var/www/html/webc
#vi /var/www/html/weba/index.html
<html>
<head>
<meta http-equiv="REFRESH" content="0;url=/app1">
</head>
</html>
|
#vi /var/www/html/webb/index.html
<html>
<head>
<meta http-equiv="REFRESH" content="0;url=/app2">
</head>
</html>
|
#vi /var/www/html/webc/index.html
<html>
<head>
<meta http-equiv="REFRESH" content="0;url=/app3">
</head>
</html>
|
測試
xyz.com point to tomcat1/webapps/app1
ah.xyz.com point to tomcat1/webapps/app2
ag.xyz.com point to tomcat1/webapps/app3
Apache Rewrite設定權限
#vim /etc/httpd/conf/httpd.conf
<VirtualHost *:80>
ServerName tomcat1.net
DocumentRoot /var/www/html/tomcat/
<Directory "/var/www/html/tomcat">
AllowOverride all //this
Order allow,deny
Allow from all
</Directory>
JKMount /* a
JKMount / a
</VirtualHost>
|
設定.htaccess
#vim /var/www/html/tomcat/.htaccess
Options +FollowSymlinks
RewriteEngine on
#RewriteCond %{REQUEST_URI} !/maintenance.html#
#RewriteCond %{REMOTE_ADDR} !^192\.168\.2\.156
#RewriteRule #/maintenance.html [R=503,L]
RewriteRule # maintenance.html
RewriteRule index\.html# maintenance.html
|
設定需要密碼驗證
#vim /etc/httpd/conf/httpd.conf
<VirtualHost *:80>
ServerName tomcat1.net
DocumentRoot /var/www/html/tomcat/
<Directory "/var/www/html/tomcat">
AllowOverride all //this
Order allow,deny
Allow from all
</Directory>
JKMount /* a
JKMount / a
</VirtualHost>
|
設定.htaccess
#vim /var/www/html/tomcat/.htaccess
#AuthName "Protect test by .htaccess"
#Authtype Basic
#AuthUserFile /var/www/apache.passwd
#require user test
|
#htpasswd -c /var/www/apache.passwd test 輸入兩次密碼
設定maintenance page 使用linux script
1.修改/etc/httpd/conf/httpd.conf
ErrorDocument 503 /maintenance.html
ErrorDocument 404 /maintenance.html
NameVirtualHost *:80
Include conf/vhost.conf
|
2.創建/etc/httpd/conf/vhost.conf
<VirtualHost *:80>
ServerName tomcat1.net
DocumentRoot /var/www/html/tomcat/
<Directory "/var/www/html/tomcat">
AllowOverride all
Order allow,deny
Allow from all
</Directory>
JKMount /* a
JKMount / a
</VirtualHost>
|
3.設定Maintenance Page
#echo “Maintenance Page” > /var/www/html/index.html
#echo “Maintenance Page” >/var/www/html/tomcat/index.html
4.寫Script
#vim /sbin/mainten-page.sh
#!/bin/bash
case "#1" in
start)
sed -i s/^/#/g /etc/httpd/conf/vhost.conf
/etc/init.d/httpd reload
;;
stop)
sed -i s/^#//g /etc/httpd/conf/vhost.conf
/etc/init.d/httpd reload
;;
*)
echo "{start|stop}"
exit 1
esac
|
Apache server 要把全站的 URL 轉向到特定網頁
網站需要維修停機時, 可以這麼做....
<VirtualHost *:80>
ServerName www.xxxxx.com.tw
Redirect permanent / http://www.yyyy.com.tw/zzzz.html
</VirtualHost>
|
設定Tomcat 關閉自動進入maintenance.html網頁
方法一:
在httpd.conf 加入
ErrorDocument 503 /maintenance.html
|
新增maintenance.html 在Tomcat index.html 目錄(/var/www/html/tomcat/)
連結器
|
通訊協定
|
支援平衡負載
|
mod_jserv
|
ajp 1.2
|
第一個 AJP 連結器,不支援負載平衡。
|
mod_jk
|
ajp 1.3
|
支援負載平衡,但已不用。
|
mod_jk2
|
ajp 1.3
|
支援負載平衡。
|
mod_webapp
|
warp 1.0
|
不支援負載平衡
|
Apache Setting Tomcat
Load balance
#vi /ect/httpd/conf/workers.properties
worker.list=lbg
worker.tomcat1.port=8009
worker.tomcat1.host=192.168.2.154
worker.tomcat1.type=ajp13
worker.tomcat1.lbfactor=1
worker.tomcat2.port=8109
worker.tomcat2.host=192.168.2.154
worker.tomcat2.type=ajp13
worker.tomcat2.lbfactor=1
worker.lbg.type=lb
worker.lbg.balanced_workers=tomcat1,tomcat2
|
#vi /ect/httpd/conf/httpd.conf
<VirtualHost *:80>
ServerName 192.168.2.154
#DocumentRoot "/var/www/html/web"
JkMount /* lbg
JkMount / lbg
</VirtualHost>
|
#vi /home/node2/tomcat1/conf/server.xml
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">
|
#vi /home/node2/tomcat2/conf/server.xml
<Server port="8105" shutdown="SHUTDOWN">
<Connector port="8180" protocol="HTTP/1.1"
<Connector port="8109" protocol="AJP/1.3" redirectPort="8443" />
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat2">
|
設定管理網頁介面使用者
#vi /home/node2/tomcat1/conf/tomcat-users.xml and tomcat2
<role rolename="manager"/>
<role rolename="admin"/>
<user username="admin" password="123456" roles="manager,admin"/>
|
打開瀏覽器輸入tomcat1:192.168.2.154:8080 tomcat2: 192.168.2.154:8180
創建網頁index.jsp
將原本的index.jsp 備份並新增
#mv ~/tomcat1/webapps/ROOT/index.jsp
~/tomcat1/webapps/ROOT/backup_index.jsp
#vi ~/tomcat1/webapps/ROOT/index.jsp
<html>
<body bgcolor="red">
<center>
<%= request.getSession().getId() %>
<h1>Tomcat 1</h1>
</body>
</html>
|
Tomcat2一樣備份index.jsp
#vi ~/tomcat2/webapps/ROOT/index.jsp
<html>
<body bgcolor="blue">
<center>
<%= request.getSession().getId() %>
<h1>Tomcat 2</h1>
</body>
</html>
|
測試
多個瀏覽器會載入不同的Tomcat
遇到問題一:
Q:tomcat change port (8080、8005、8009)(8180、8105、8109)之後無法連到,但是192.168.2.154:8180可以進入,防火牆關閉,Selinux 關閉,telnet 192.168.2.154 8109 可以進入,但是log顯示有問題
[info] jk_open_socket::jk_connect.c (626): connect to 192.168.2.154:8109 failed (errno=13)
[Thu Mar 08 11:56:14 2012][30224:47911840514880] [info] ajp_connect_to_endpoint::jk_ajp_common.c (1008): Failed opening socket to (192.168.2.154:8109) (errno=13)
[Thu Mar 08 11:56:14 2012][30224:47911840514880] [error] ajp_send_request::jk_ajp_common.c (1630): (tomcat2) connecting to backend failed. Tomcat is probably not started or is listening on the wrong port (errno=13)
[Thu Mar 08 11:56:14 2012][30224:47911840514880] [info] ajp_service::jk_ajp_common.c (2607): (tomcat2) sending request to tomcat failed (recoverable), because of error during request sending (attempt=1)
[Thu Mar 08 11:56:14 2012][30224:47911840514880] [info] ajp_connect_to_endpoint::jk_ajp_common.c (1008): Failed opening socket to (192.168.2.154:8109) (errno=13)
[Thu Mar 08 11:56:14 2012][30224:47911840514880] [error] ajp_send_request::jk_ajp_common.c (1630): (tomcat2) connecting to backend failed. Tomcat is probably not started or is listening on the wrong port (errno=13)
[Thu Mar 08 11:56:14 2012][30224:47911840514880] [info] ajp_service::jk_ajp_common.c (2607): (tomcat2) sending request to tomcat failed (recoverable), because of error during request sending (attempt=1)
A:最後發現問題所在,network hostname 不是localhost.localdomain
修改/etc/hosts、/etc/sysconfig/network、#hostname XXX,修改完後重開網路,或重新開機,就可以連上。
Workers
使用workers.properties文件配置Apache服務器與多個Tomcat Worker協同工作.
為了使Apache Web服務器給Tomcat 6實例傳遞輸入請求, 必須了解它們在網絡上的位置. 要描述Tomcat 服務器在網絡上的位置, 以提供怎麼樣使用每個Tomcat實例的專門設置, 需要配置稱為workers.properties 的訊息文件. 此文件在Apache Web服務器的conf 目錄下. mod_jk模塊在啟動時將為 workers.properties文件掃描conf目錄, 然後處理配置文件和初始化連接到worker. 以下介紹此workers.properties文件 :
1. workers.properties 文件格式:
workers.properties 文件總挌式是:
(1) 描述worker列表.
(2) 描述上個步驟中列表的worker實例.
為了描述Apache 服務器上運行的worker列表, 使用者可以使用一個或多個的以下聲明:
worker.list =
例如以下範例描述了兩個名為testworker1 與 testworker2的worker
worker.list = testworker1, testworker2
如果有多個worker, 不必在同一行指定. 為了描述 worker.list列表中的每個worker實例, 可以使用以下聲名挌式:
worker. . =
是重要的, 它通常與Tomcat 端配置的jvmRoute名稱相同. 例如 workers.properties 中以下的行為 testworker1 worker實例的主機屬性指派IP地址 192.168.0.XXX
worker.testworker1.host = 192.168.0.xxx
每個worker實例可以設定許多不同屬性, 如下介紹.
2. worker 類型:
對於worker實例, 其中一個重要的屬性是worker 類型, 這可以再worker.properties文件中設置. 必須給每一個Tomcat worker指派一個類型. Tomcat 6集成 mod_jk 連接器支持以下worker類型:
* ajp13 : 本類型的worker代表了運行的Tomcat 實例, 本worker可能有許多屬性. 主要的屬性包括 tomcatId (它代表Tomcat 實例的身分), channel 與 max_connections.
* lb : 本類型worker用於負載平衡.
* status : 這是特殊的worker 類型, 用來顯示關於負載在各種Tomcat worker間是怎樣分部訊息.
* jni : 本進程中的worker使用JNI處理轉寄請求到進程中的Tomcat worker. 在進程中, Tomcat Web容器與Web 服務器共享同樣的內存空間.
* ajp12 : 本Worker支持AJP 1.2協議. 這是一個由 mod_jk支持的遺留協議, 僅僅為了向前相容. 不建議配置於Tomcat 6中.
以如下範例為testworker1設置類型為ajp13, 請求mod_jk使用AJP13協議轉寄請求到testworker1 Tomcat 6實例 :
worker.testworker1.type = ajp13
3. 其他worker屬性:
可以在worker.properties中根據worker的類型設置屬性, 如下將針對類型為ajp13的屬性進行介紹:
* host : Tomcat 6實例worker所在的主機. 這裡可以給解析的hostname或ip位置.
* port : Tomcat 6 worker實例的AJP1.3連接器為輸入請求監聽的端口, 預設是8009.
* connection_pool_size : 連接池中為worker保持的連接數. 因為重新創建socket是件耗資源的操作, 如果連接池已存在連接, Apache Web服務器的請求可以立即轉寄到設定的worker實例, 而不必創建一個新的連接. 在Apache 1.3和 2.x prefork上, 因為它們不是多線程, 所以應當被設為1.
* connection_pool_minsize : 連接池中保持連接數的最小值.
* connection_pool_timeout : 在本worker生命週期結束前, 它在連接池中保持的秒數.
* mount : 本worker的context 路徑. 路徑當用空挌分開. 本屬性可以用於替代或加上httpd.conf文件中的JKMount指令.
* retries : 再轉寄請求期間, 當一個worker返回錯誤時, 它控制mod_jk將再次重發本worker的時間. 默認值是3.
* socket_timeout : 默認值是0, 這表示無限長的等待時間. 本時間間隔控制 mod_jk在提示錯誤, 將等待socket 上 worker響應的時間.
* socket_keepalive : 指示是否保持到worker的連接具續於活動狀態 : 1為true, 0為不保持keep-alive. 默認值為0
* lbfactor : 指示負載平衡因素的整數.
以如下當作範例, worker.properties文件中在 192.169.0.xxx配置了一個稱為testworker1的 Tomcat 實例. 它在9009端口監聽 AJP 1.3請求. 本worker 的bfactor被設置為 20. 本worker實例未完成的連接限制為5, 每個實例在連接池中的將維持5 分鐘的生命週期:
worker.list = testworker1
worker.testworker1.type = ajp13
worker.testworker1.host = 192.168.0.xxx
worker.testworker1.port = 9009
worker.testworker1.connection_pool_size = 5
worker.testworker1.connection_pool_timeout = 300
worker.list=ajp13
worker.ajp13.port=8009
worker.ajp13.host=localhost
worker.ajp13.type=ajp13
worker.ajp13.lbfactor=1
worker.ajp13.cachesize=10
worker.ajp13.cache_timeout=600
worker.ajp13.socket_keepalive=1
worker.ajp13.socket_timeout=300
worker.ajp13.port=8009
worker.ajp13.host=localhost
worker.ajp13.type=ajp13
worker.ajp13.lbfactor=1
worker.ajp13.cachesize=10
worker.ajp13.cache_timeout=600
worker.ajp13.socket_keepalive=1
worker.ajp13.socket_timeout=300
worker.ajp13.lbfactor=5
worker.ajp13.cachesize=30
worker.loadbalancer.type=lb
worker.loadbalancer.balanced_workers=ajp13
worker.inprocess.type=jni
worker.inprocess.class_path=#(workers.tomcat_home)#(ps)bin#(ps)bootstrap.jar
worker.inprocess.cmd_line=start
worker.inprocess.jvm_lib=#(workers.java_home)#(ps)jre#(ps)bin#(ps)server#(ps)jvm.dll
worker.inprocess.stdout=#(workers.tomcat_home)#(ps)logs#(ps)inprocess.stdout
worker.inprocess.stderr=#(workers.tomcat_home)#(ps)logs#(ps)inprocess.stderr
worker.ajp13.cachesize=30
worker.loadbalancer.type=lb
worker.loadbalancer.balanced_workers=ajp13
worker.inprocess.type=jni
worker.inprocess.class_path=#(workers.tomcat_home)#(ps)bin#(ps)bootstrap.jar
worker.inprocess.cmd_line=start
worker.inprocess.jvm_lib=#(workers.java_home)#(ps)jre#(ps)bin#(ps)server#(ps)jvm.dll
worker.inprocess.stdout=#(workers.tomcat_home)#(ps)logs#(ps)inprocess.stdout
worker.inprocess.stderr=#(workers.tomcat_home)#(ps)logs#(ps)inprocess.stderr
沒有留言:
張貼留言