tomcat配置及基於nginx、apache反向代理tomcat

 如今,基於Web的應用越來越多,傳統的Html已經滿足不了如今的需求。我們需要一個交互式的Web,於是便誕生了各種Web語言。如Asp,Jsp,Php等。當然,這些語言與傳統的語言有着密切的聯繫,如Php基於C和C 語言,Jsp基於Java語言。Tomcat即是一個Jsp和Servlet的運行平臺。

  Tomcat是一個免費的開源的Serlvet容器,它是Apache基金會的Jakarta項目中的一個核心項目,由Apache,Sun和其它一些公司及個人共同開發而成。由於有了Sun的參與和支持,最新的Servlet和Jsp規範總能在Tomcat中得到體現。Tomcat被JavaWorld雜誌的編輯選爲2001年度最具創新的java產品,可見其在業界的地位。

Tomcat最新版本是4.0x.4.0x與3.x的架構不同,而是重新設計的。Tomcat4.0x中採用了新的Servlet容器:Catalina,完整的實現了Servlet2.3和Jsp1.2規範。Tomcat提供了各種平臺的版本供下載,可以從http://jakarta.apache.org上下載其源代碼版或者二進制版。由於Java的跨平臺特性,基於Java的Tomcat也具有跨平臺性。與傳統的桌面應用程序不同,Tomcat中的應用程序是一個WAR(WebArchive)文件。WAR是Sun提出的一種Web應用程序格式,與JAR類似,也是許多文件的一個壓縮包。這個包中的文件按一定目錄結構來組織:通常其根目錄下包含有Html和Jsp文件或者包含這兩種文件的目錄,另外還會有一個WEB-INF目錄,這個目錄很重要。通常在WEB-INF目錄下有一個web.xml文件和一個classes目錄,web.xml是這個應用的配置文件,而classes目錄下則包含編譯好的Servlet類和Jsp或Servlet所依賴的其它類(如JavaBean)。通常這些所依賴的類也可以打包成JAR放到WEB-INF下的lib目錄下,當然也可以放到系統的CLASSPATH中,但那樣移植和管理起來不方便。

在Tomcat中,應用程序的部署很簡單,你只需將你的WAR放到Tomcat的webapp目錄下,Tomcat會自動檢測到這個文件,並將其解壓。你在瀏覽器中訪問這個應用的Jsp時,通常第一次會很慢,因爲Tomcat要將Jsp轉化爲Servlet文件,然後編譯。編譯以後,訪問將會很快。另外Tomcat也提供了一個應用:manager,訪問這個應用需要用戶名和密碼,用戶名和密碼存儲在一個xml文件中。通過這個應用,輔助於Ftp,你可以在遠程通過Web部署和撤銷應用。當然本地也可以。

 Tomcat不僅僅是一個Servlet容器,它也具有傳統的Web服務器的功能:處理Html頁面。但是與Apache相比,它的處理靜態Html的能力就不如Apache.我們可以將Tomcat和Apache集成到一塊,讓Apache處理靜態Html,而Tomcat處理Jsp和Servlet.這種集成只需要修改一下Apache和Tomcat的配置文件即可。

  另外,Tomcat提供Realm支持。Realm類似於Unix裏面的group.在Unix中,一個group對應着系統的一定資源,某個group不能訪問不屬於它的資源。Tomcat用Realm來對不同的應用(類似系統資源)賦給不同的用戶(類似group)。沒有權限的用戶則不能訪問這個應用。

  Tomcat提供三種Realm,1:JDBCRealm,這個Realm將用戶信息存在數據庫裏,通過JDBC獲得用戶信息來進行驗證。2:JNDIRealm,用戶信息存在基於LDAP的服務器裏,通過JNDI獲取用戶信息。3:MemoryRealm,用戶信息存在一個xml文件裏面,上面講的manager應用驗證用戶時即使用此種Realm.通過Realm我們可以方便地對訪問某個應用的客戶進行驗證。

  在Tomcat4中,你還可以利用Servlet2.3提供的事件監聽器功能,來對你的應用或者Session實行監聽。Tomcat也提供其它的一些特徵,如與SSL集成到一塊,實現安全傳輸。還有Tomcat也提供JNDI支持,這與那些J2EE應用服務器提供的是一致的。說到這裏我們要介紹一下通常所說的應用服務器(如WebLogic)與Tomcat有何區別。應用服務器提供更多的J2EE特徵,如EJB,JMS,JAAS等,同時也支持Jsp和Servlet.而Tomcat則功能沒有那麼強大,它不提供EJB等支持。

  基於Tomcat的開發其實主要是Jsp和Servlet的開發,開發Jsp和Servlet非常簡單,你可以用普通的文本編輯器或者IDE,然後將其打包成WAR即可。我們這裏要提到另外一個工具Ant,Ant也是Jakarta中的一個子項目,它所實現的功能類似於Unix中的make.你需要寫一個build.xml文件,然後運行Ant就可以完成xml文件中定義的工作,這個工具對於一個大的應用來說非常好,我們只需在xml中寫很少的東西就可以將其編譯並打包成WAR.事實上,在很多應用服務器的發佈中都包含了Ant.另外,在Jsp1.2中,可以利用標籤庫實現Java代碼與Html文件的分離,使Jsp的維護更方便。

  Tomcat也可以與其它一些軟件集成起來實現更多的功能。如與上面提到的JBoss集成起來開發EJB,Cocoon(Apache的另外一個項目)集成起來開發基於Xml的應用,與OpenJMS集成起來開發JMS應用,除了我們提到的這幾種,可以與Tomcat集成的軟件還有很多。Tomcat確實是一個很好的工具,不僅僅因爲其免費,功能強大,更因爲其開放性。如今,開源軟件越來越收到人們的重視,Linux就是一個成功的典型。人們不再限於只使用軟件,而且已經關心起軟件的具體實現。我們有理由相信Tomcat會走得更遠。

一、安裝配置tomcat:

1)安裝tomcat必須先安裝jdk:

lftp 172.16.0.1:~> cd pub/Sources/6.x86_64/jdk/

jdk-7u9-linux-x64.rpm

tomcat> get apache-tomcat-7.0.42.tar.gz


[root@node1 ~]# rpm -ivh jdk-7u9-linux-x64.rpm

Preparing...                ########################################### [100%]

  1:jdk                    ########################################### [100%]


2)編輯配置文件讓java工作起來

[root@node1 ~]# vim /etc/profile.d/java.sh

export JAVA_HOME=/usr/java/lates

export PATH=$JAVA_HOME/bin:$PATH

[root@node1 ~]# . /etc/profile.d/java.sh                                  

3)安裝tomcat:

[root@node1 ~]# tar xf apache-tomcat-7.0.42.tar.gz -C /usr/local

[root@node1 ~]# cd /usr/local

[root@node1 local]# ln -sv apache-tomcat-7.0.42 tomcat

`tomcat' -> `apache-tomcat-7.0.42'

[root@node1 local]# cd tomcat


4)導出文件路徑

[root@node1 tomcat]# vim /etc/profile.d/tomcat.sh

export CATALINA_HOME=/usr/local/tomcat

export PATH=$CATALINA_HOME/bin:$PATH


[root@node1 tomcat]# . /etc/profile.d/tomcat.sh

5)爲tomcat提供啓動服務腳本

[root@node1 latest]# vim /etc/init.d/tomcat

!/bin/sh

# Tomcat init script for Linux.

#

# chkconfig: 2345 96 14

# description: The Apache Tomcat servlet/JSP container.

# JAVA_OPTS='-Xms64m -Xmx128m'

JAVA_HOME=/usr/java/latest

CATALINA_HOME=/usr/local/tomcat

export JAVA_HOME CATALINA_HOME


case $1 in

start)

 exec $CATALINA_HOME/bin/catalina.sh start ;;

stop)

 exec $CATALINA_HOME/bin/catalina.sh stop;;

restart)

 $CATALINA_HOME/bin/catalina.sh stop

 sleep 2

 exec $CATALINA_HOME/bin/catalina.sh start ;;

configtest)

 exec $CATALINA_HOME/bin/catalina.sh configtest ;;

*)

 exec $CATALINA_HOME/bin/catalina.sh * ;;

esac

6)修改文件權限

[root@node1 latest]# chmod +x /etc/init.d/tomcat

[root@node1 latest]# service tomcat start

7)爲tomcat提供一個jsp頁面:

root@node1 webapps]# mkdir testapp

[root@node1 webapps]# cd testapp/

[root@node1 testapp]# mkdir -pv WEB-INF/{classes,lib}

mkdir: created directory `WEB-INF'

mkdir: created directory `WEB-INF/classes'

mkdir: created directory `WEB-INF/lib'


[root@node1 testapp]# vim index.jsp


<%@ page language="java" %>

<%@ page import="java.util.*" %>

<html>

 <head>

   <title>JSP test Page</title>

 </head>

 <body>

   <%

      out.println("Hello world!");

      out.println("Hello MageEdu!");

   %>

 </body>

</html>

這樣tomcat就可以工作了

wKiom1NvXzzwQigYAABgoIuqC3Q902.jpg




二、以nginx反向代理tomcat

   主機                 ip                            安裝服務

   主機1             172.16.24.11  192.168.24.1       nginx

   主機2             192.168.24.11                    tomcat

   主機3             192.168.24.12                    tomcat

1)主機1編輯配置nginx

[root@slave3 ~]# vim /etc/nginx/nginx.conf


location / {

          # root   html;

          # index  index.html index.htm;

          proxy_pass http://192.168.24.11:8080;

       }


2)啓動nginx

[root@slave3 ~]# service nginx reload

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok

nginx: configuration file /etc/nginx/nginx.conf test is successful

Reloading nginx:                                           [  OK  ]

3)nginx實現動靜分離

location / {

          root   /web/htdocs;

           index  index.html index.htm;


       }


location ~* \.(jsp|do)$ {

proxy_pass http://192.168.24.11:8080;

}

location ~* \.(jpg|jpeg|png|pdf|doc|rar|) {

proxy_pass http://192.168.24.12:8080;

}





三、 配置apache通過mod_proxy模塊與Tomcat連接


要使用mod_proxy與Tomcat實例連接,需要apache已經裝載mod_proxy、mod_proxy_http、mod_proxy_ajp和proxy_balancer_module(實現Tomcat集羣時用到)等模塊:


# /usr/local/apache/bin/httpd -D DUMP_MODULES | grep  proxy

proxy_module (shared)

proxy_connect_module (shared)

proxy_ftp_module (shared)

proxy_http_module (shared)

proxy_fcgi_module (shared)

proxy_scgi_module (shared)

proxy_ajp_module (shared)

proxy_balancer_module (shared)

proxy_express_module (shared)


2、在httpd.conf的全局配置段或虛擬主機中添加如下內容:

ProxyVia Off

ProxyRequests Off

ProxyPreserveHost Off

<Proxy *>

 Require all granted

</Proxy>

 ProxyPass  /  ajp://172.16.100.1:8009/

 ProxyPa***everse  /  ajp://172.16.100.1:8009/

<Location  / >

 Require all granted

</Location>


或讓apache跟Tomcat的http連接器進行整合:

ProxyVia Off

ProxyRequests Off

ProxyPass / http://172.16.100.1:8080/

ProxyPa***everse / http://172.16.100.1:8080/

<Proxy *>

 Require all granted

</Proxy>

<Location  / >

 Require all granted

</Location>


關於如上apache指令的說明:


ProxyPreserveHost {On|Off}:如果啓用此功能,代理會將用戶請求報文中的Host:行發送給後端的服務器,而不再使用ProxyPass指定的服務器地址。如果想在反向代理中支持虛擬主機,則需要開啓此項,否則就無需打開此功能。


ProxyVia  {On|Off|Full|Block}:用於控制在http首部是否使用Via:,主要用於在多級代理中控制代理請求的流向。默認爲Off,即不啓用此功能;On表示每個請求和響應報文均添加Via:;Full表示每個Via:行都會添加當前apache服務器的版本號信息;Block表示每個代理請求報文中的Via:都會被移除。


ProxyRequests {On|Off}:是否開啓apache正向代理的功能;啓用此項時爲了代理http協議必須啓用mod_proxy_http模塊。同時,如果爲apache設置了ProxyPass,則必須將ProxyRequests設置爲Off。


ProxyPass  [path]  !|url  [key=value key=value ...]]:將後端服務器某URL與當前服務器的某虛擬路徑關聯起來作爲提供服務的路徑,path爲當前服務器上的某虛擬路徑,url爲後端服務器上某URL路徑。使用此指令時必須將ProxyRequests的值設置爲Off。需要注意的是,如果path以“/”結尾,則對應的url也必須以“/”結尾,反之亦然。

另外,mod_proxy模塊在httpd 2.1的版本之後支持與後端服務器的連接池功能,連接在按需創建在可以保存至連接池中以備進一步使用。連接池大小或其它設定可以通過在ProxyPass中使用key=value的方式定義。

1)apache基於http代理tomcat

[root@slave3 ~]# cd /etc/httpd/

[root@slave3 httpd]# ls

conf  conf.d  logs  modules  run

[root@slave3 httpd]# cd conf.d

[root@slave3 conf.d]# ls

mod_dnssd.conf  README  welcome.conf

[root@slave3 conf.d]# vim tomcat.conf


ProxyVia on

ProxyRequests off

proxyPreserveHost on

ProxyPass / http://192.168.24.11:8080/

ProxyPa***everse / httpd://192.168.24.11:8080/


<Location />

  Order Allow,Deny

  Allow from all

</Location>


2)apache基於jsp代理tomcat

[root@slave3 conf.d]# vim tomcat.conf

ProxyVia on

ProxyRequests off

proxyPreserveHost on

ProxyPass / ajp://192.168.24.11:8009/

ProxyPa***everse / ajp://192.168.24.11:8009/


<Location />

  Order Allow,Deny

  Allow from all

</Location>

wKiom1NvYhXxbhZaAAIYzAKNjGo146.jpg


































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