1. 程式人生 > >整合整合Apache和Tomcat

整合整合Apache和Tomcat

  1. Apache是web伺服器,Tomcat是應用(java)伺服器,它只是一個servlet容器,是Apache的擴充套件。
  2. Apache和Tomcat都可以做為獨立的web伺服器來執行,但是Apache不能解釋java程式(jsp,serverlet)。
  3. Apache和Tomcat是獨立的,在同一臺伺服器上可以整合搜尋。

一、安裝Apache

Apache版本:httpd-2.4.33.tar.gz 

安裝前準備:下載 httpd-2.4.33.tar.gz 
           apr-1.6.3.tar.gz
            apr-util-1.6.1.tar.gz
           expat-2.0.1.tar.gz
           pcre-8.10.zip

步驟:

# tar xzvf httpd-2.4.33.tar.gz
# cd httpd-2.4.33
# ./configure --prefix=/usr/local/apache2 --enable-so   (apache2看實際目錄名字)
# sudo make
# sudo make install

./configure --prefix=/usr/local/apahce  --enable-so ,若提示以下錯誤:

error: APR not found. Please read the documentation


則安裝apr

# tar xzvf apr-1.6.3.tar.gz
# cd apr-1.6.3
# ./configure --prefix=/usr/local/apr
# sudo make 
# sudo make install

再次返回到httpd-2.4.33 目錄進行安裝,檢查編譯環境
若報錯:configure: error: APR-util not found. Please read the documentation

則安裝apr-util

# tar xzvf apr-util-1.6.1.tar.gz
# cd apr-util-1.6.1
# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
# sudo make 
# sudo make install

安裝apr-util包make時報錯:make: *** [all-recursive] Error 1

解決辦法:安裝Expat解析XML

# tar xzvf expat-2.0.1.tar.gz
# cd expat-2.0.1
# ./configure
# sudo make
# sudo make install

安裝完成後重新返回apr-util-1.6.1目錄執行

# sudo make 
# sudo make install

再次返回到httpd-2.4.33 目錄進行安裝,檢查編譯環境,執行
./configure --prefix=/usr/local/apache --enable-so 仍提示APR-util not found增加--with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util

./configure --prefix=/usr/local/apache --enable-so --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util

執行後出現
configure: error: pcre-config for libpcre not found. PCRE is required and available from http://pcre.org/

#./configure –help | grep pcre
--with-pcre=PATH        Use external PCRE library

則安裝pcre-8.10.zip

#unzip -o pcre-8.10.zip
#cd pcre-8.10
#./configure --prefix=/usr/local/pcre
#sudo make
#sudo make install

最後安裝apahce:(安裝httpd服務需要指定apr apr-util pcre這三個目錄才能正常安裝)

./configure --prefix=/usr/local/apache --enable-rewrite --enable-so --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --with-pcre=/usr/local/pcre

#sudo make

#sudo make install

httpd服務安裝完成

二、啟動Apache並訪問驗證

1.預設的web根目錄為:htddocs

  預設埠為:80

  為避免衝突可將埠號修改為8088

# vi /usr/local/apache/conf/httpd.conf

找到 listen 80  修改為  8088儲存退出

2.啟動Apache伺服器

# /usr/local/apache/bin/apachectl -k start

進入安裝目錄

# cd /usr/local/apache/bin/
# ./apachectl –k start|stop|restart   分別為啟動 停止 重啟

netstat -ltnp  檢查網路埠 驗證剛才我們的埠號是否打開了

# netstat –ltnp

這時檢視我們的埠號是否打開了  結果:8088打開了

開啟瀏覽器 輸入 http://IP地址:8088
出現 it works 表示連線已經正常
到此安裝完畢

3.配置rc.local檔案將Apache的服務加入到開機自動啟動(這步未使用網上看到的寫出來預防萬一)
# echo  '/usr/local/apache2/bin/apachectl -k start'  >>  /etc/rc.d/rc.local

如果安裝完成之後,發現還報錯,可以將apr,apr-util的解壓包拷貝至http解壓包的srclib/目錄下,然後重新安裝

三、tomcat已安裝

四、編譯生成mod_jk

1、下載 tomcat-connectors-1.2.43-src.tar.gz

2、下載後,首先把tomcat-connectors-1.2.43-src.tar.gz複製到/usr/local

# cp tomcat-connectors-1.2.43-src.tar.gz /usr/local

解壓

# tar xzvf tomcat-connectors-1.2.43-src.tar.gz

解壓後,進入native資料夾

# cd tomcat-connectors-1.2.43-src/native
# ./configure --with-apxs=/usr/local/apache/bin/apxs  (此處可根據apxs實際地址修改)
# make

完成編譯後,在/usr/local/tomcat-connectors-1.2.43-src/native/apache-2.0資料夾下可以找到mod_jk.so檔案

# cp ./apache-2.0/mod_jk.so /usr/local/apache/modules/

編譯完成
 

3、問題:在編譯mod_jk.so檔案的時候,我遇到了找不到apxs檔案,所以編譯不了,apxs是一個為Apache HTTP伺服器編譯和安裝擴充套件模組的工具,用於編譯一個或多個源程式或目的碼檔案為動態共享物件,使之可以用由mod_so提供的LoadModule指令在執行時載入到Apache伺服器中。

正常按順序安裝後apxs就已存在,若沒有有可能是查詢路徑有問題

我的是在/usr/local/apache/bin/apxs路徑下
 

五、整合Apache和Tomcat

1、建立配置檔案

在/usr/local/apache/conf/下面建立兩個配置檔案mod_jk.conf和workers.properties

mod_jk.conf 內容如下:

#LoadModule jk_module modules/mod_jk.so  


JkWorkersFile /etc/httpd/conf/workers.properties  
# Where to put jk logs  
JkLogFile /var/log/httpd/mod_jk.log  


# Set the jk log level [debug/error/info]  
JkLogLevel info  


# Select the log format  
JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"  


# JkOptions indicate to send SSL KEY SIZE,   
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories  
# JkRequestLogFormat set the request format   
JkRequestLogFormat "%w %V %T"  


JkMount /*/servlet/*  worker1  
JkMount /*.jsp worker1  
JkMount /application/* worker1  
JkMount /*.do worker1  
JkMount /*.class worker1  
JkMount /*.jar worker1  
  • 其中,前兩個引數(JkWorkersFile和JkLogFile)具體的值會因為apache安裝路徑的不同而不同,此處需寫入自己的apache伺服器的路徑。 
  • 檔案末尾的幾行JkMount意思是將符合條件的檔案交給Tomcat處理。
  • 中間則是一些常規引數的設定。

workers.properties內容如下

# Defining a worker named worker1 and of type ajp13  
worker.list=worker1  


# Set properties for worker1  
worker.worker1.type=ajp13    
worker.worker1.host=localhost   (因安裝在遠端伺服器上故我設定為ip)
worker.worker1.port=8009  	 (此處是tomcat的埠)
worker.worker1.lbfactor=50    
worker.worker1.cachesize=10    
worker.worker1.cache_timeout=600    
worker.worker1.socket_keepalive=1    
worker.worker1.socket_timeout=300

接著是對/conf資料夾下自帶的httpd.conf檔案加入如下內容:

LoadModule jk_module modules/mod_jk.so
Include /etc/httpd/conf/mod_jk.conf
<VirtualHost *:80>
     DocumentRoot "/usr/local/apache-tomcat-7.0.81/webapps/test"	(此處為tomcat新建測試test專案目錄,根據實際情況修改)
     JkMount /* worker1
</VirtualHost>

儲存之後重啟Apache和Tomcat。
 

新建index.jsp頁面放於tomcat目錄webapps/test/index.jsp

<html>    
<head><title>Hello</title></head>   
<body>
<%
java.util.Date currentTime = new java.util.Date();
%>
<%=currentTime%>
</body>    
</html>

訪問http://ip:8088/test/index.jsp

若頁面正常載入顯示當前系統時間,則說明整合成功

但我目前訪問時報502錯誤,原因未知,不知道是不是配置檔案存在問題,若後續解決會更新文章
 

----------------------------------------------------------------------------------------------------------------

過程中遇到的問題:


一、xxx is not in the sudoers file.This incident will be reported.的解決方法

1.切換到root使用者下

su - root 

2.新增sudo檔案的寫許可權,命令是:

chmod u+w /etc/sudoers

3.編輯sudoers檔案
vi /etc/sudoers
找到這行 root ALL=(ALL) ALL,在他下面新增xxx ALL=(ALL) ALL (這裡的xxx是你的使用者名稱)

ps:這裡說下你可以sudoers新增下面四行中任意一條
youuser            ALL=(ALL)                ALL
%youuser           ALL=(ALL)                ALL
youuser            ALL=(ALL)                NOPASSWD: ALL
%youuser           ALL=(ALL)                NOPASSWD: ALL

第一行:允許使用者youuser執行sudo命令(需要輸入密碼).
第二行:允許使用者組youuser裡面的使用者執行sudo命令(需要輸入密碼).
第三行:允許使用者youuser執行sudo命令,並且在執行的時候不輸入密碼.
第四行:允許使用者組youuser裡面的使用者執行sudo命令,並且在執行的時候不輸入密碼.

4.撤銷sudoers檔案寫許可權,命令:
chmod u-w /etc/sudoers

這樣普通使用者就可以使用sudo了.

二、Linux檢視tomcat版本
先進到tomcat的bin目錄下(cd /tomcat目錄/bin),在執行./version.sh

三、vim 命令
https://blog.csdn.net/feosun/article/details/73196299