1. 程式人生 > >linux高級運維之Tomcat&&varnish

linux高級運維之Tomcat&&varnish

accept ip訪問 tar 有關 原理 use dir 更新 html

linux高級運維之Tomcat、varnish代理

案例1:安裝部署Tomcat服務器

案例2:使用Tomcat部署虛擬主機

案例3:使用Varnish加速Web

Java及解釋器:

tomcat:8080  幾乎不做靜態頁面 幾乎都是做tomcat+jsp

java 生態  類庫  

jdk  open-jdk推薦使用這個 orcale和google官司 andiaod[java]jdk  

java[sun]

jre(jdk的閹割版) 

java 擴展名jsp

java是war包  可以自動解war包  自動重讀配置文件

unpackWARs="true" autoDeploy="true"   Deploy配置

安裝部署Tomcat服務器

裝包:

驗證是否有open-jdk 

rpm -qa | grep jdk

tar zxf apache-tomcat-8.0.30.tar.gz 

mv apache-tomcat-8.0.30  /usr/local/tomcat  移動到哪裏就裝到哪裏了。

ls /usr/local/tomcat    //Tomcat文件目錄

    bin/                    //主程序目錄

    lib/                    //庫文件目錄

    logs/                   //日誌目錄  

    temp/                   //臨時目錄

    work/                   //自動編譯目錄jsp代碼轉換servlet

    conf/                   //配置文件目錄

    webapps/                //頁面目錄

firewall-cmd --set-default-zone=trusted

setenforce 0

./startup.sh 

ss -natulp | grep java  //檢查8080;8005;8009端口

firefox 192.168.2.222:8080

firefox 192.168.2.111:8080/test.jsp

重啟服務是先關再啟:

./shutdown.sh

./startup.sh

使用Tomcat部署虛擬主機

實現兩個基於域名的虛擬主機,域名分別為:www.a.com和 www.b.com

使用www.a.com域名訪問的頁面根路徑為/usr/local/tomcat/aa/ROOT

使用www.b.com域名訪問的頁面根路徑為/usr/local/tomcat/bb/base

訪問www.a.com/test時,頁面自動跳轉到/var/www/html目錄下的頁面

訪問頁面時支持SSL加密通訊

私鑰、證書存儲路徑為/usr/local/tomcat/conf/cert

每個虛擬主機都擁有獨立的訪問日誌文件

配置tomcat集群環境

主配置文件結構:配置文件嚴格區分大小寫

    <?xml version=‘1.0‘ encoding=‘utf-8‘?>

    <Server port="8005" shutdown="SHUTDOWN">

      <Service name="Catalina">

        <Connector port="8080" protocol="HTTP/1.1"

          connectionTimeout="20000" redirectPort="8443" />    

        <Connector port="8009" protocol="AJP/1.3" 

            redirectPort="8443" />

            <Engine name="Catalina" defaultHost="localhost">

                <Host name="localhost"  appBase="webapps"

               unpackWARs="true" autoDeploy="true">

                </Host>

           </Engine>

      </Service>

    </Server>

配置文件結構也可看下圖
技術分享圖片

基於域名的虛擬主機:

vim  /usr/local/tomcat/conf/server.xml 

    <Engine name="Catalina" defaultHost="localhost">

        //defaultHost優先級最低 不用域名用ip訪問時默認訪問這個,nginx 是默認訪問第一個server

        //host裏能內嵌host 平級的 location也不能內置location。

    <Host name="www.a.com"  appBase="a"

            unpackWARs="true" autoDeploy="true">

            //自動解壓war文件,自動重讀配置文件

        </Host>

          <Host name="www.b.com"  appBase="b"

            unpackWARs="true" autoDeploy="true">

        </Host>

mkdir -p  /usr/local/tomcat/{a,b}/ROOT

        //默認網頁文件是放在appbase中的ROOT目錄下

echo "AAA"   > /usr/local/tomcat/a/ROOT/index.html

echo "BBB" > /usr/local/tomcat/b/ROOT/index.html

重啟服務

./shutdown.sh

./startup.sh

setenforce 0 

firewall-cmd --set-default-zone=trusted

sed -i ‘$a 192.168.2.111   www.a.com  www.b.com ‘ /etc/hosts

    //修改客戶端的hosts文件方便驗證

firefox www.a.com:8080

firefox www.b.com:8080

修改www.b.com網站的首頁目錄為base

appBase  docBase  path="/test   三個跟頁面有關(路徑)的參數

如果有很多項目 改docbase  每個項目的頁面放在不同的目錄下

docBase參數可以修改默認網站首頁路徑  docBase基本文件路徑

docBase="base"  默認打開目錄是ROOT  不寫就是打開ROOT 寫了就打開base

步驟:

vim  /usr/local/tomcat/conf/server.xml 

     <Host name="www.b.com"  appBase="b"

         unpackWARs="true" autoDeploy="true">

         <Context path="" docBase="base" reloadable="true"/>

            //在host中加了Context把默認網頁由ROOT該為了base

        </Host>

mkdir  /usr/local/tomcat/b/base

echo "BASE" > /usr/local/tomcat/b/base/index.html

./shutdown.sh

./startup.sh

firefox http://www.b.com:8080/        //結果為base目錄下的頁面內容

當用戶訪問http://www.a.com/test打開/var/www/html目錄下的頁面

<Context path="" docBase="base" reloadable="true"/>

    如果沒有匹配到路徑(空)那麽就看docbase去這個路徑去找

<Context path="/test" docBase="/var/www/html/" />  可以寫多個 相當於if

    匹配地址欄 打開什麽文件  如果地址是test就打開後面的文件

步驟:

vim  /usr/local/tomcat/conf/server.xml 

    <Host name="www.a.com" appBase="a" 

        unpackWARS="true" autoDeploy="true">

        <Context path="/test" docBase="/var/www/html/" />

        </Host>

echo "Test" > /var/www/html/index.html

./shutdown.sh

./startup.sh

firefox http://www.aa.com:8080/test    

    //返回/var/www/html/index.html的內容

    //註意,訪問的端口為8080

配置Tomcat支持SSL加密網站

tomcat可以同時啟兩個重復考配多份保證配置沒有沖突就行,改改端口號之類的可以。

就是個java程序而已,兩個程序之間很獨立不會相互影響掛了一個不影響其他的。

apache nginx 都是一個端口對應一個域名 一個虛擬主機   

tomcat 端口和虛擬主機沒有綁定,一個端口可以訪問所有的虛擬主機!

        //進了門可以享受所有的服務-_-。

步驟:

生成證書和私鑰

keytool -genkeypair -alias tomcat -keyalg RSA -keystore /usr/local/tomcat/keystore

    //-genkeypair     生成密鑰對

    //-alias tomcat     密鑰別名

    //-keyalg RSA     定義密鑰算法為RSA算法

    //-keystore         定義密鑰文件存儲在:/usr/local/tomcat/keystore

添加安全端口加入對應加密文件和密碼

vim  /usr/local/tomcat/conf/server.xml 

    keystoreFile="/usr/local/tomcat/keystore" keystorePass="123456"  //這段是需要添加的

    配置如下默認這段Connector被註釋掉了,打開註釋,添加密鑰信息即可

    <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"

    maxThreads="150" SSLEnabled="true" scheme="https" secure="true"

    keystoreFile="/usr/local/tomcat/keystore" keystorePass="123456" 

        clientAuth="false" sslProtocol="TLS" />

./shutdown.sh

./startup.sh

驗證 firefox https:www.a.com:8443

配置Tomcat日誌

為每個虛擬主機設置不同的日誌文件

不同虛擬web的日誌:

vim  /usr/local/tomcat/conf/server.xml 

    <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"

           prefix="a_log" suffix=".txt"   //只需要改日誌名(prefix)稱謂和格式suffix

          pattern="%h %l %u %t &quot;%r&quot; %s %b" /> 

重啟Tomcat服務器

ls /usr/local/tomcat/logs/

    catalina.logs  整個tomcat軟件的日誌

配置Tomcat集群

Tomcat默認監聽端口8080:訪問不方便;解決方法 用nginx做調度器

    //和nginx做web高可用 tcp/udp代理原理一樣 只是端口為8080

步驟:

配置Nginx調度器

    vim  /usr/local/nginx/conf/nginx.conf

        http{

            upstream toms {

            server 192.168.2.100:8080;

            server 192.168.2.200:8080;

                //註意端口為8080

            }

            server  {

            listen 80;

            server_name localhost;

            location / {

                proxy_pass  http://toms;

            }

配置Tomcat服務器

yum -y install  java-1.8.0-openjdk                //安裝JDK

yum -y install java-1.8.0-openjdk-headless        //安裝JDK

tar -xzf  apache-tomcat-8.0.30.tar.gz   

mv apache-tomcat-8.0.30  /usr/local/tomcat

./startup.sh

firefox https:192.168.4.5   //訪問nginx調度器

Varnish緩存服務器

varnish 做的事情是把總部的資源緩存到全國各地去  解決距離遠的問題和中國南北通信問題(電信聯通相互租用線路)

可以這樣:成都 backend 長沙backend上海 backend北京(最原始的服務器) 其他都是緩存

使用Varnish加速後端Web服務

代理服務器可以將遠程的Web服務器頁面緩存在本地

遠程Web服務器對客戶端用戶是透明的

利用緩存機制提高網站的響應速度

使用varnishadm命令管理緩存頁面

使用varnishstat命令查看Varnish狀態

步驟:

構建Web服務器:隨意 有個頁面可以訪問就可以

部署Varnish緩存服務器(192.168.4.5)

yum -y install gcc readline-devel  ncurses-devel  pcre-devel  
python-docutils-0.11-0.2.20130715svn7687.el7.noarch.rpm 

        //安裝依賴包 

useradd -s /sbin/nologin varnish  //建用戶

tar zxf varnish-5.2.1.tar.gz 

cd varnish-5.2.1/

./configure 

make && make install

cp  etc/example.vcl  /usr/local/etc/default.vcl

        //復制啟動腳本及配置文件

vim  /usr/local/etc/default.vcl

    backend default {           backend:後臺  後臺可以寫很多

            .host = "192.168.2.100";    //後天web服務器地址

            .port = "80";

        }

    varnishd  -f /usr/local/etc/default.vcl

    //varnishd命令的其他選項說明如下:

    //varnishd –s malloc,128M        定義varnish使用內存作為緩存,空間為128M,默認是內存

    //varnishd –s file,/var/lib/varnish_storage.bin,1G 定義varnish使用文件作為緩存

curl 192.168.4.5

    192.168.2.111

killall httpd   殺死真正web服務器的httpd服務

curl 192.168.4.5

    192.168.2.111   發現還是能訪問頁面,因為已經被varnish緩存到4.5上了。

驗證結果:

firefox f12  看到via  就是說通過緩存看到了server nginx

via:http/1.1 ctc.ningbo.ha2ts4.83 (ApacheTrafficServer/6.2.1 [cHs f ]), 

     http/1.1 ctc.chengdu.ha2ts4.24 (ApacheTrafficServer/6.2.1 [cRs f ])

curl -I 192.168.4.5   看響應頭(包頭)信息

    HTTP/1.1 200 OK

    Date: Thu, 31 May 2018 09:53:34 GMT

    Server: Apache/2.4.6 (Red Hat Enterprise Linux) PHP/5.4.16   這裏

    Last-Modified: Mon, 28 May 2018 01:43:06 GMT

    ETag: "e-56d3a3d36393a"

    Content-Length: 14

    Content-Type: text/html; charset=UTF-8

    X-Varnish: 32790

    Age: 0

    Via: 1.1 varnish (Varnish/5.2)      這裏緩存了server

    Accept-Ranges: bytes

    Connection: keep-alive

查看varnish日誌

varnishlog          很細節的日誌 用於排錯。

varnishncsa         簡單日誌(風格類似apache,nginx)

192.168.4.100 - - [31/May/2018:18:00:29 +0800] "HEAD http://192.168.4.5/ HTTP/1.1" 200 0 "-" "curl/7.29.0"

更新緩存數據

web服務器後臺的數據變化了  varnish幾分鐘會自動和後臺同步新,但非實時更新。

不願意等就varnishadm  

varnish> ban req.url ~ .*

//清空緩存數據,支持正則表達式

小思考:

nginx 做調度就是解決服務器壓力大的問題所有就只放一個網頁(如www.c.com)就行了 

要想訪問服務器上本身並發不高的基於域名的www.a.com  www.b.com 就直接用域名訪問真實的服務器就可以了(不走代理) 

而www.c.com這個壓力很大的頁面就走代理192.168.4.5來訪問輪詢。

這樣就既解決了某個網站壓力大需要輪詢 也可以用一個服務器放多個頁面? 

linux高級運維之Tomcat&&varnish