centos6.5有關tengine反向代理tomcat服務器的基本配置

因爲之前有過系統方面的基礎,所以半路出家,從一個測試get到了運維技能,在這裏寫一點有關tengine反向代理tomcat的總結,希望能幫到讀者。
tengine是淘寶網發起的一個開源web服務器項目,在原來nginx的基礎上,添加了一些新的高級功能和特性,針對大訪問網站的需求,讀者可以嘗試使用,目前我使用的就是tengine。


以下面的拓撲爲例,我們來說說基本的配置,敘述的會非常細,tengine本文都以nginx代替方便描述

拓撲圖中一臺nginx服務器代理三臺tomcat服務器,這是最簡單也是最基本的一個代理


一.tomcat安裝配置(三臺)


1.jdk安裝:
rpm -qa|grep java     ---使用如上命令查看舊版java信息
yum -y remove java    ---卸載java,項目在jdk7基礎上開發可卸載安裝7
#安裝jdk
上傳準備好的jdk包jdk-7u71-linux-x64.rpm

執行以下命令安裝,安裝路徑爲/usr/java/jdk1.7.0_71:
rpm  -ivh jdk-7u71-linux-x64.rpm
配置jdk環境變量
vim /etc/profile
JAVA_HOME=/usr/java/jdk1.7.0_71
CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
PATH=$JAVA_HOME/bin:$PATH
export JAVA_HOME CLASS_PATH PATH
jdk安裝完成,使用echo $JAVA_HOME查看JDK安裝路徑、查看版本java -version


2.這裏我們在tomcat服務器上創建如下目錄,主要爲了方便服務器的管理和備份,下面會一一介紹:
mkdir -p /server/war/
mkdir -p /server/war/log
mkdir -p /server/war/backup
mkdir -p /server/war/webapps
chmod 775 /server/war

chmod 775 /server/war/log/

chmod 775 /server/war/backup/

chmod 775 /server/war/webapps/


3.tomcat安裝:

上傳tomcat安裝包如apache-tomcat-7.0.59.tar.gz至/server目錄下
執行命令: tar zxvf apache-tomcat-7.0.59.tar.gz
mv apache-tomcat-7.0.59 /server/xxx_tomcat                                 #可根據項目名命名,方便日後管理
設置tomcat環境變量: 

vim /etc/profile,

寫入以下內容:

 export TOMCAT_HOME=/server/xxx_tomcat

tomcat官網地址:點擊打開鏈接                        

下載tomcat,這裏我使用的是tomcat7,讀者也可根據實際需要下載最新穩定版

4.在/server/war目錄下編寫autotomcat.sh、 backup.sh 、echolog.sh、starttomcat.sh、stoptomcat.sh腳本
vim autotomcat.sh 
#set java JDK
JAVA_HOME=/usr/java/jdk1.7.0_71
CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
PATH=$JAVA_HOME/bin:$PATH
export JAVA_HOME CLASSPATH PATH
/server/xxx_tomcat/bin/shutdown.sh
#PROCESS_STR=`ps aux|grep tomcat|grep -v grep`
#PROCESS_ARRAY=(${PROCESS_STR// / })
#PROCESS_ID=${PROCESS_ARRAY[1]}
#PROCESS_CHECK=${#PROCESS_ID}
#kill -9 $PROCESS_ID
rm -rf /server/war/webapps/*
rm -f /server/war/webapps/*
rm -rf /server/xxx_tomcat/work/Catalina/localhost/*
cp *.war /server/war/webapps/
/server/xxx_tomcat/bin/startup.sh
此腳本用於自動啓動tomcat


vim backup.sh
cp *.war ./backup/ 
此腳本用於備份war包


vim echolog.sh
tail -f ./log/catalina.out  

此腳本用於跟蹤日誌


vim starttomcat.sh
cp *.war /server/war/webapps/
/server/xxx_tomcat/bin/startup.sh | tail -f ./log/catalina.out
此腳本用於啓動tomcat並跟蹤日誌


vim stoptomcat.sh
OCESS_STR=`ps aux|grep tomcat|grep -v grep`
#PROCESS_ARRAY=(${PROCESS_STR// / })
#PROCESS_ID=${PROCESS_ARRAY[1]}
#PROCESS_CHECK=${#PROCESS_ID}
#kill -9 $PROCESS_ID
rm -rf /server/war/webapps/*
rm -f /server/war/webapps/*
rm -rf /server/xxx_tomcat/work/Catalina/localhost  
此腳本用於停止tomcat並清空webapps目錄下文件

分別賦予上述腳本可執行權限
chmod +x 腳本名

5.安裝 Tomcat-native(提升tomcat性能的本地API),這裏就不再多贅述,直接上步驟,讀者按着來即可
#apr-1.5.1.tar.gz安裝
tar zxvf apr-1.5.1.tar.gz
cd apr-1.5.1
./configure --prefix=/usr/local/apr 
make
make install

#apr-iconv-1.2.1.tar.gz安裝
cd ..
tar zxvf apr-iconv-1.2.1.tar.gz
cd apr-iconv-1.2.1
./configure --prefix=/usr/local/apr-iconv --with-apr=/usr/local/apr
make
make install

#apr-util-1.5.4.tar.gz安裝
cd ..
tar zxvf apr-util-1.5.4.tar.gz
cd apr-util-1.5.4
./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr --with-apr-iconv=/usr/local/apr-iconv/bin/apriconv
make
make install

#tomcat-native.tar.gz安裝
cd ..
tar zxvf tomcat-native.tar.gz 
cd tomcat-native-1.1.32-src/jni/native
./configure --with-apr=/usr/local/apr --with-java-home=/usr/java/jdk1.7.0_71
make
make install

#配置tomcat-native環境
vim /etc/profile
#set tomcat-native
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/apr/lib

6.tomcat配置修改:
vim /server/xxx_tomcat/conf/server.xml
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="off" />           #on 改成 off(28,82 10%)

7.刪除tomcat目錄下webapps下的manager、host-manager文件夾全部刪除,安全要求:
rm -rf /server/xxx_tomcat/webapps/host-manager/
rm -rf /server/xxx_tomcat/webapps/manager/
rm -rf /server/xxx_tomcat/webapps/docs/
rm -rf /server/xxx_tomcat/webapps/examples/
rm -rf /server/xxx_tomcat/webapps/ROOT/

8.調整tomcat日誌存放位置:
vim /server/xxx_tomcat/bin/catalina.sh
# CATALINA_OUT="$CATALINA_BASE"/logs/catalina.out                                                                       #註銷原文(185,1 34%)
  CATALINA_OUT=/server/war/log/catalina.out #新增地址存放位置

修改其他 log 文件位置
vim /server/xxx_tomcat/conf/logging.properties
1catalina.org.apache.juli.FileHandler.level = FINE                                                                                      #(25,1 35%)
#1catalina.org.apache.juli.FileHandler.directory = ${catalina.base}/logs                                               #註銷原文
1catalina.org.apache.juli.FileHandler.directory = /server/war/log                                                            #新增地址存放位置
1catalina.org.apache.juli.FileHandler.prefix = catalina.

2localhost.org.apache.juli.FileHandler.level = FINE
#2localhost.org.apache.juli.FileHandler.directory = ${catalina.base}/logs                                           #註銷原文
2localhost.org.apache.juli.FileHandler.directory = /server/war/log                                                        #新增地址存放位置
2localhost.org.apache.juli.FileHandler.prefix = localhost.

3manager.org.apache.juli.FileHandler.level = FINE
#3manager.org.apache.juli.FileHandler.directory = ${catalina.base}/logs                                          #註銷原文
3manager.org.apache.juli.FileHandler.directory = /server/war/log                                                       #新增地址存放位置
3manager.org.apache.juli.FileHandler.prefix = manager.

4host-manager.org.apache.juli.FileHandler.level = FINE
#4host-manager.org.apache.juli.FileHandler.directory = ${catalina.base}/logs                                #註銷原文
4host-manager.org.apache.juli.FileHandler.directory = /server/war/log                                             #新增地址存放位置
4host-manager.org.apache.juli.FileHandler.prefix = host-manager.

配置日誌大小,結尾處增加 每天轉儲一次 重新創建  轉儲15次,也就是15天:
vim /etc/logrotate.conf 
/server/war/log/catalina.out {
     daily
     copytruncate
     dateext
     nocompress
     missingok
     rotate 15
}

9.tomcat優化:
JVM優化:
vim /server/xxx_tomcat/bin/catalina.sh
JAVA_OPTS="-server -Xms1024m -Xmx1024m -XX:MaxNewSize=256m -XX:PermSize=256m -XX:MaxPermSize=256m"#(60;10%)

tomcat配置修改:
vim /server/xxx_tomcat/conf/server.xml
  <Connector port="8080" protocol="HTTP/1.1"                                                                                 #將原來的 8080 修改成需要的值即可 (71,3 46%)
               maxHttpHeaderSize="8192"
               maxThreads="1000"
               minSpareThreads="100"
               maxSpareThreads="1000" 
               minProcessors="100" 
               maxProcessors="1000" 
               enableLookups="false"
               compression="on"
               compressionMinSize="2048"
               compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"
               acceptCount="1000"
               connectionTimeout="3000"
               URIEncoding="utf-8" 
               redirectPort="8443"
               disableUploadTimeout="true" /> 
上述配置僅供參考,讀者需根據實際業務需要進行相應配置
付:
maxHttpHeaderSize    //來自於客戶端請求的Request和Response的HTTP header的最大長度,以字節計算。如果不設置,該屬性爲4096(4K)
maxThreads                //客戶請求最大線程數
minSpareThreads     //Tomcat初始化時創建的 socket 線程數
maxSpareThreads   //Tomcat連接器的最大空閒 socket 線程數
minProcessors         //最小空閒連接線程數,用於提高系統處理性能,默認值爲 10
acceptCount            //允許的最大連接數,應大於等於 maxProcessors ,默認值爲 100
enableLookups      //若設爲true, 則支持域名解析,可把 ip 地址解析爲主機名
compression          //打開壓縮功能
compressionMinSize            //啓用壓縮的輸出內容大小,這裏面默認爲2KB
compressableMimeType      //壓縮類型
connectionTimeout               //網絡連接超時,單位:毫秒。設置爲 0 表示永不超時,這樣設置有隱患的。通常可設置爲 30000 毫秒。
URIEncoding                         //URL統一編碼 
redirectPort                            //這裏系統默認的,它指定轉發端口,如果當前只支持non-SSL請求,在需要安全通信的場所,將把客戶請求轉發至SSL的redirectPort端口。
disableUploadTimeout       //該標誌位表明當執行servlet時,是否允許servlet容器使用一個不同的、更長的連接超時。啓用該標誌位將導致在上傳數據時,
                                                要麼使用更長的時間完成上傳,要麼出現更長的超時。如果不指定,該屬性爲“false”。

10.指定web應用程序的配置目錄:
vim /server/xxx_tomcat/conf/server.xml
<Host name="localhost"  appBase="/server/war/webapps" unpackwars="true" autoDeploy="true">              #位置(136,39 86%)

至此三臺tomcat就安裝完成了,可以上傳個war包進行測試下,例如demo.war(原始url訪問路徑爲:http://tomcatIP:8080/demo/login),上傳該包至/server/war/目錄下,

然後啓動./starttomcat,部署完成後即可使用每臺tomcat的IP用如上url訪問方式訪問應用。
從這裏看使用看,這種訪問方式是不是不太方便,下面就介紹本文拓撲中的nginx反向代理tomcat並用域名的方式訪問應用

二.nginx安裝:


1.nginx組件安裝:
#GCC編譯器:
yum install -y gcc
#G++編譯器:
yum install -y gcc-c++
#PCRE庫:
yum install -y pcre pcre-devel
#zlib庫:
yum install -y zlib zlib-devel
#OpenSSL開發庫:
yum install -y openssl openssl-devel

2.安裝nginx:
從tengine官網下載tengine穩定版本(如tengine-2.1.2.tar.gz),官網地址:點擊打開鏈接
讀者可根據項目選擇對應版本,這裏我使用的是2.1.2版本
解壓tengine-2.1.2.tar.gz  安裝路徑爲/server/tengine-2.1.2
tar zxvf tengine-2.1.2.tar.gz
cd tengine-2.1.2./configure --prefix=/server/xxx_tengine                      #指定nginx安裝根目錄,xxx_tengine命名和tomcat命名相同,

                                                                                                                         可有可無makemake installnginx安裝完成
付:
修改nginx內核支持高併發請求的TCP網絡參數:
vim /etc/sysctl.conf
寫入如下內容:
fs.file-max=999999                                                   #file-max表示進程(比如一個worker進程),這個參數直接限制最大併發連接數,需根據實際修改
net.ipv4.tcp_tw_reuse=1                                         #tcp_tw_reuse參數爲1表示將TIME_WAIT狀態的socket重新用於新的TCP連接
net.ipv4.tcp_keeplive_time=600                           #tcp_keepalive_time表示當keepalive啓用時,TCP發送消息的頻度,默認兩小時,設置小可快速清理無效連接
net.ipv4.tcp_fin_timeout=30                                  #tcp_fin_timeout表示服務器主動關閉時,socket保持在FIN-WAIT-2狀態的最大時間
net.ipv4.tcp_max_tw_buckets= 5000                  #tcp_max_tw_buckets表示操作系統允許TIME_WAIT套接字數量的最大值,過多的套接字會是Web服務器變慢
net.ipv4.ip_local_port_range=1024    61000    #ip_local_port_range定義了UDP和TCP連接中本地端口的取值範圍
net.ipv4.tcp_rmem=4096 32768 262142           #net.ipv4.tcp_rmem定義TCP接收緩存的最小值、默認值、最大值
net.ipv4.tcp_wmem=4096 32768 262142         #net.ipv4.tcp_rmem定義TCP發送緩存的最小值、默認值、最大值
net.core.netdev_max_backlog=8096          
net.core.rmem_default=262144
net.core.wmem_default=262144
net.core.rmem_max=2097152
net.core.wmem_max=2097152
net.ipv4.tcp_syncookies=1
net.ipv4.tcp_max_syn.backlog=1024                 #tcp_max_syn.backlog表示TCP三次握手建立階段接收SYN請求隊列的最大長度,默認1024,設置大一點可在nginx繁忙來不                                                                                      及accept新連接時,linux不丟失客戶端發起的連接請求
該配置僅供參考,讀者可根據實際需求修改


3.反向代理nginx.conf的配置:
upstream tomcat_server {
           server  tomcat1:8080 weight=1;
           server  tomcat2:8080 backup;
           server  tomcat3:8080 weight=2;
       }

server {
         listen 80;
         server_name xxx.com;
         location /{                                                                               #注意/和{之間沒有空格
             proxy_pass http://tomcat_server/demo/login;
             proxy_set_header Host $host;
             proxy_set_header X-real-ip $remote_addr;
             proxy_set_header X-forwarded-for $proxy_add_x_forwarded_for;
             
            }
          location /demo {                                                                  #注意/demo和{之間有空格
             proxy_pass http://tomcat_server/demo;
             proxy_set_header Host $host;
             proxy_set_header X-real-ip $remote_addr;
             proxy_set_header X-forwarded-for $proxy_add_x_forwarded_for;
             
            }
       }   
此配置是最基本的反向代理配置,寫在http{}標籤內,配置完成後可使用如下命令檢查語法準確性:
/server/xxx_tengine/sbin/nginx -t
修改nginx.conf配置後需重載配置,可使用此命令:
/server/xxx_tengine/sbin/nginx -s reload
啓動nginx後即可食用域名xxx.com訪問部署的應用
下面介紹幾種常用nginx算法:
weight                            #權重,根據設置的權重值大小,轉發請求給後端服務器(backend),可用於服務器硬件配置不均的情況,低配置處理少量請求,高配置處理多請求
ip_hash                         #hash算法,根據IP的hash值達到一致性請求,可用於解決session共享問題,使用ip_hash算法時不可使用weight等其它算法
backup                          #類似於冗餘備份,當tomcat1宕機時,tomcat2接手工作


廢話了這麼多,至此centos6.5有關tengine反向代理tomcat服務器的介紹到此結束,本文拓撲實例可用於讀者學習或者內部的測試環境,生產環境需要對nginx做高可用,LVS+keepalived+nginx的配置在這裏就不多,後續有時間會和大家一起分享
















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