使用apache反向代理tomacat

使用apache反向代理tomacat

 

 

起源

    在大部分的生產環境中,基本上使用的都是java程序,從而促進了各類應用程序中間件的產生,在這裏大概有幾種,tomcat做爲最著名的開源servlet容器,jboss也是開源的,並且有管理界面,主要是redhat的,而weblogic則是oracle的商業中間件,而webspare則是IBM的商業中間件,其餘的幾個例如jetty,resin用的也就比較少了。html

    在安裝tomcat的時候,每次首先須要安裝的是jdk,提供jvm虛擬機,jre運行環境,從而每次安裝jdk的時候,有幾種選擇,生產環境基本上使用的都是openjdk,不會產生版權的問題,在開發環境通常使用的是oracle的jdk。在安裝完jdk以後,通常都要輸出一個環境變量爲JAVA_HOME。java

    在java中,JVM也分爲幾種,一種是oracle的JRokit虛擬機,主要是使用在weblogic上面;一種是IBM的J9虛擬機,主要使用在IBM的webspare中;一種則是Hotspot,主要使用在openJDK上面。node

    在生產環境中,servlet的變化爲,tomcat——webspare——jboss,小的時候使用開源的,由於免費;慢慢變大,由於維護問題,變成收費;愈來愈大,又採起了開源,由於免費。前任使用的是weblogicpython

 

配置apache反代tomcat

    在使用apache反向代理tomcat提供服務的時候,主要的請求模型以下所示:linux

 

    

    客戶端瀏覽器發送http請求到apache,而後apache將用戶的請求反響代理到後端的tomcat服務器之中,在apache進行反代的時候,可使用http協議或者是ajp協議,而ajp協議的運行效率比http效率更高,從而通常使用的是ajp協議。nginx

    apache在進行反向代理的時候,必須存在幾個模塊,具體以下:web

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[root@mogilenode2 extra] # httpd -M |grep proxy
 
  proxy_module (shared)
 
  proxy_connect_module (shared)
 
  proxy_ftp_module (shared)
 
  proxy_http_module (shared)
 
  proxy_scgi_module (shared)
 
  proxy_ajp_module (shared)
 
  proxy_balancer_module (shared)
 
Syntax OK


    在進行編譯安裝的時候,默認是不會安裝代理的模塊的,從而在編譯的時候能夠添加選項,--enable-proxy,--enable-proxy-http,--enable-proxy-ajp,若是已經安裝完成,也能夠採用DSO的機制,使用命令apxs -ica mod_proxy.c來進行動態裝載模塊。apache

    apache的主要配置文件以下:bootstrap

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
[root@mogilenode2 extra] # cat httpd-vhosts.conf
 
NameVirtualHost *:80
 
<VirtualHost *:80>
 
     DocumentRoot  "/usr/local/apache/htdocs"
 
     ServerName www.kel.com
 
     ServerAlias kel.com
 
     ProxyVia On
 
     ProxyRequests Off
 
     ProxyPreserveHost On
 
     ProxyPass  /status  !
 
     ProxyPass  / ajp: //192 .168.1.238:8009/
 
     ProxyPassReverse  / ajp: //192 .168.1.238:8009/
 
     #ProxyPass  / http://192.168.1.238:8080/
 
     #ProxyPassReverse  / http://192.168.1.238:8080/
 
     ErrorLog  "logs/www.kel.com-error_log"
 
     CustomLog  "logs/www.kel.com-access_log"  common
 
< /VirtualHost >
 
<Location  /status >
 
     SetHandler server-status
 
     Order allow,deny
 
     Allow from all
 
< /Location >

  

    在配置文件中,主要參數分別介紹以下:ServerName表示主機名,主要用來區分虛擬主機,ProxyVia 主要是給http添加頭部響應信息,表示通過了此apache服務器,ProxyRequests 主要是表示使用的正向代理仍是反向代理,Off表示使用的是反響代理,ProxyPreserverHost表示是否將主機名反向代理給後端主機,當tomcat有多個虛擬主機的時候,須要開啓,ProxyPass主要用來表示反響代理到後端的哪一個主機,當使用感嘆號的時候,表示不反代,由apache直接響應,須要反代的時候,須要寫上後端的協議,主機名和端口號,ProxyPass主要是爲了解決重定向的問題,其餘的兩個爲日誌信息,ServerAlias表示主機別名,用這個名稱也能夠進行訪問,status主要是用來查看apache的狀態頁面信息。後端

    查看tomcat的默認監聽的進程:

複製代碼
[root@mogilenode3 ~]# ps -ef|grep java

root      3166     1  0 17:08 pts/0    00:00:25 /usr/java/latest/bin/java -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties
-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources
-classpath /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/usr/local/tomcat -Dcatalina.home=/usr/local/tomcat
-Djava.io.tmpdir=/usr/local/tomcat/temp org.apache.catalina.startup.Bootstrap start root 3219 863 0 18:00 pts/0 00:00:00 grep java [root@mogilenode3 ~]# netstat -tnlp|grep java tcp 0 0 :::8080 :::* LISTEN 3166/java tcp 0 0 ::ffff:127.0.0.1:8005 :::* LISTEN 3166/java tcp 0 0 :::8009 :::* LISTEN 3166/java [root@mogilenode3 ~]# pstree -p 3166|wc -l 40
複製代碼

 

    根據上面能夠看到,默認tomcat監聽了三個端口,也就是三個鏈接器connector,其中8080使用的是http協議,主要用來接受用戶請求響應,8005監聽的本地localhost的地址,主要是用來管理tomcat進程,而8009使用的是ajp協議。在使用apache進行反代的時候,能夠看到配置文件中,當使用http協議反代的時候,使用的端口是8080,當使用ajp協議反代的時候,使用的端口是8009.能夠看到默認狀況下,tomcat開啓了40個線程。

    查看管理進程的命令使用:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@mogilenode3 ~] # telnet 127.0.0.1 8005(直接關閉tomcat服務)
 
Trying 127.0.0.1...
 
Connected to 127.0.0.1.
 
Escape character is  '^]' .
 
SHUTDOWN
 
Connection closed by foreign host.
 
[root@mogilenode3 ~] # ps -ef|grep java
 
root      3244   863  0 18:13 pts /0     00:00:00  grep  java

測試

    ​使用網頁測試,在使用網頁測試的時候,主要修改hosts的域名解析地址:

 

    ​查看響應頭信息以下(會看到在apache中添加的指令ProxyVia添加的首部信息):

    ​當關閉tomcat服務以後,服務端的響應以下所示:

1
2
3
4
5
6
7
8
9
[root@mogilenode2 ~] # curl -I http://www.kel.com
 
HTTP /1 .1 503 Service Temporarily Unavailable
 
Date: Sat, 23 Sep 2017 22:27:37 GMT
 
Connection: close
 
Content-Type: text /html ; charset=iso-8859-1

    ​
    ​在查看響應碼的時候,狀態碼爲503,表示服務暫時不可用,這種能夠做爲在生產環境中出問題判斷問題處在哪裏。

    ​吐槽一下apache,apache作爲最經典的web服務器,佔用的市場份額,那麼大,語法太複雜了,和nginx比起來一個天上一個地下,在進行動靜分離的時候,nginx更加適合,在使用和tomcat結合的時候,apache適合點,畢竟都是apache旗下的產物,更容易結合,並且有專門的協議ajp來進行傳輸。

    ​httpd原本就複雜,而後IBM還弄了一個webspare,俗稱WAS,結合的方式就是用httpd,而後搖身一變變成了IHS,語法變得更加複雜,在進行反向代理負載均衡的時候,簡直就是一坨屎,不想吐槽,然而不少人追求穩定性,說webspare,然而在使用集羣的時候,體驗並非那麼的好。

 

    ​使用nginx,更簡單易用的web服務器。

 

 

  WEB服務器統計數據以下:

 

 

for linux and python
以上引自連接:http://www.cnblogs.com/kellyseeme/p/7590323.html
相關文章
相關標籤/搜索