手動部署LNMT(Nginx+Tomcat)並實現Nginx反向代理Tomcat

1、什麼是Tomcat?

在弄清楚Tomcat以前要先了解什麼是J2EE:從總體上講,J2EE 是使用 Java 技術開發企業級應用的工業標準,它是 Java 技術不斷適應和促進企業級應用過程當中的產物。 適用於企業級應用的 J2EE,提供一個平臺獨立的、可移植的、多用戶的、安全的和基於標準的企業級平臺,從而簡化企業應用的 開發、管理和部署。J2EE 是一個標準,而不是一個現成的產品。html

而Tomcat就能夠算是一個不完整的J2EE,tomcat爲衆多的java應用程序服務器嵌入本身的產品中構建商業的java應用程序服務器。java

2、Tomcat的yum安裝

1.安裝JDKlinux

Tomcat的運行須要有JDK的支持nginx

2.安裝Tomcatweb

yum install -y java-1.8.0-openjdk.x86_64
yum install -y tomcat.noarch tomcat-admin-webapps.noarch tomcat-docs-webapp.noarch tomcat-webapps.noarch tomcat-javadoc.noarch

3.啓動Tomcat數據庫

yum安裝JDK和Tomcat後就能啓動了,Tomcat默認監聽在8009端口apache

systemctl start tomcat

3、Tomcat配置文件結構

一、Tomcat各常見配置組件

1.服務器(server):Tomcat的一個實例,一般一個JVM只能包含一個Tomcat實例;所以,一臺物理服務器上能夠在啓動多個JVM的狀況下在每個JVM中啓動一個Tomcat實例,每一個實例分屬於一個獨立的管理端口。這是一個頂級組件。
2.服務(service):一個服務組件一般包含一個引擎和與此引擎相關聯的一個或多個鏈接器。給服務命名能夠方便管理員在日誌文件中識別不一樣服務產生的日誌。一個server能夠包含多個service組件,但一般情下只爲一個service指派一個server。vim

鏈接器類組件:
3.鏈接器(connectors):負責鏈接客戶端(能夠是瀏覽器或Web服務器)請求至Servlet容器內的Web應用程序,一般指的是接收客戶發來請求的位置及服務器端分配的端口。默認端口一般是HTTP協議的8080,管理員也能夠根據本身的須要改變此端口。一個引擎能夠配置多個鏈接器,但這些鏈接器必須使用不一樣的端口。默認的鏈接器是基於HTTP/1.1的Coyote。同時,Tomcat也支持AJP、JServ和JK2鏈接器。後端

容器類組件:
4.引擎(Engine):引擎通是指處理請求的Servlet引擎組件,即Catalina Servlet引擎,它檢查每個請求的HTTP首部信息以辨別此請求應該發往哪一個host或context,並將請求處理後的結果返回的相應的客戶端。嚴格意義上來講,容器沒必要非得經過引擎來實現,它也能夠是隻是一個容器。若是Tomcat被配置成爲獨立服務器,默認引擎就是已經定義好的引擎。而若是Tomcat被配置爲Apache Web服務器的提供Servlet功能的後端,默認引擎將被忽略,由於Web服務器自身就能肯定將用戶請求發往何處。一個引擎能夠包含多個host組件。
5.主機(Host):主機組件相似於Apache中的虛擬主機,但在Tomcat中只支持基於FQDN的「虛擬主機」。一個引擎至少要包含一個主機組件。
6.上下文(Context):Context組件是最內層次的組件,它表示Web應用程序自己。配置一個Context最主要的是指定Web應用程序的根目錄,以便Servlet容器可以將用戶請求發往正確的位置。Context組件也可包含自定義的錯誤頁,以實如今用戶訪問發生錯誤時提供友好的提示信息。瀏覽器

被嵌套類(nested)組件:
這類組件一般包含於容器類組件中以提供具備管理功能的服務,它們不能包含其它組件,但有些卻能夠由不一樣層次的容器各自配置。
7.閥門(Valve):用來攔截請求並在將其轉至目標以前進行某種處理操做,相似於Servlet規範中定義的過濾器。Valve能夠定義在任何容器類的組件中。Valve常被用來記錄客戶端請求、客戶端IP地址和服務器等信息,這種處理技術一般被稱做請求轉儲(request dumping)。請求轉儲valve記錄請求客戶端請求數據包中的HTTP首部信息和cookie信息文件中,響應轉儲valve則記錄響應數據包首部信息和cookie信息至文件中。
8.日誌記錄器(Logger):用於記錄組件內部的狀態信息,可被用於除Context以外的任何容器中。日誌記錄的功能可被繼承,所以,一個引擎級別的Logger將會記錄引擎內部全部組件相關的信息,除非某內部組件定義了本身的Logger組件。
9.領域(Realm):用於用戶的認證和受權;在配置一個應用程序時,管理員能夠爲每一個資源或資源組定義角色及權限,而這些訪問控制功能的生效須要經過Realm來實現。Realm的認證能夠基於文本文件、數據庫表、LDAP服務等來實現。Realm的效用會遍佈整個引擎或頂級容器,所以,一個容器內的全部應用程序將共享用戶資源。同時,Realm能夠被其所在組件的子組件繼承,也能夠被子組件中定義的Realm所覆蓋。

2.配置示例

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

    <Listener className="org.apache.catalina.core.JasperListener" />
    <Listener className="org.apache.catalina.mbeans.ServerLifecycleListener" />
    <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />

    <GlobalNamingResources>
        <Resource name="UserDatabase" auth="Container"
        type="org.apache.catalina.UserDatabase"
        description="User database that can be updated and saved"
        factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
        pathname="conf/tomcat-users.xml"/>
    </GlobalNamingResources>

    <Service name="Catalina">

        <Connector port="8080" protocol="HTTP/1.1"
            maxThreads="150" connectionTimeout="20000"
            redirectPort="8443"/>

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

            <Host name="localhost" appBase="webapps"
                unpackWARs="true" autoDeploy="true"
                xmlValidation="false" xmlNamespaceAware="false">
            </Host>
        </Engine>
    </Service>
</Server>

 4、環境準備

1.IP規劃、系統及軟件版本

主機1(Nginx):IP1:192.168.29.109   IP2:10.10.10.128

主機2(Tomcat):10.10.10.130

軟件及版本:

Nginx:nginx-1.12.2-2.el7.x86_64

JDK:java-1.8.0-openjdk.x86_6四、java-1.8.0-openjdk-devel.x86_64

Tomcat:tomcat-7.0.76-8.el7_5.noarch、tomcat-admin-webapps.noarch、tomcat-docs-webapp.noarch、tomcat-webapps.noarch

ps:tomcat-admin-webapps.noarch爲Tomcat服務器管理頁面,tomcat-docs-webapp.noarch爲Tomcat文檔文件,

關閉firewall與selinux。

2.軟件安裝並測試

1>在主機1上安裝Nginx,在主機2上安裝JDK、Tomcat

~]# yum install -y Nginx
~]# yum install -y tomcat-7.0.76-8.el7_5.noarch tomcat-admin-webapps.noarch tomcat-docs-webapp.noarch tomcat-webapps.noarch java-1.8.0-openjdk-devel java-1.8.0-openjdk

2>配置Nginx

vim /etc/nginx/conf.d/tomcat.conf
server { #增長虛擬主機
        listen 80; #監聽在80端口
        server_name www.ready.com; #以主機名方式創建虛擬主機,主機名爲www.ready.com
        location  / { #配置location匹配規則
                proxy_pass http://10.10.10.130:8080; #將匹配的location以http協議反代至主機2的8080端口
                }
        }

3>配置Tomcat

Tomcat的配置文件路徑在/etc/tomcat下,Tomcat的配置文件主要有下面幾個:

~]# cd /etc/tomcat/
~]# ls
Catalina             conf.d            logging.properties  tomcat-users.xml
catalina.policy      context.xml       server.xml          web.xml

1.tomcat-user.xml:Realm認證時用到的相關角色、用戶和密碼等信息;Tomcat自帶的manager默認狀況下會用到此文件;在Tomcat中添加/刪除用戶,爲用戶指定角色等將經過編輯此文件實現;

2.catalina.policy:Java相關的安全策略配置文件,在系統資源級別上提供訪問控制的能力;

3.catalina.properties:Tomcat內部package的定義及訪問相關的控制,也包括對經過類裝載器裝載的內容的控制;Tomcat在啓動時會事先讀取此文件的相關設置;

4.logging.properties: Tomcat經過本身內部實現的JAVA日誌記錄器來記錄操做相關的日誌,此文件即爲日誌記錄器相關的配置信息,能夠用來定義日誌記錄的組件級別以及日誌文件的存在位置等;
5.context.xml:全部host的默認配置信息;

在生產環境中,Tomcat通常不會直接被用戶訪問,一般狀況都會與反向代理組合使用,將客戶請求由反向代理至Tomcat進行處理,如httpd、Nginx。要注意的是若是使用Nginx只能使用http協議鏈接,而httpd則可使用http和AJP兩種協議。

4>使用Tomcat默認配置測試Nginx+Tomcat是否連通

在客戶主機(192.168.29.1)上修改hosts文件,在最後一行用管理員權限添加內容192.168.29.109 www.ready.com

啓動Nginx,Tomcat

 

~]# systemctl start nginx #主機1上操做
~]# systemctl start tomcat #主機2上操做

 

5>訪問www.ready.com

鏈接成功以下圖顯示:

 

上圖就是Tomcat的默認主頁。

tomcat-users.xml配置以下

<!-- <role rolename="admin"/> -->
<role rolename="admin-gui"/>
<!-- <role rolename="admin-gui"/> -->
<!-- <role rolename="admin-script"/> -->
<role rolename="manager-gui"/>
<user username="tomcat" password="tomcat" roles="manager-gui,admin-gui"/>
<!-- <role rolename="manager"/> -->
<!-- <role rolename="manager-gui"/> -->
<!-- <role rolename="manager-script"/> -->
<!-- <role rolename="manager-jmx"/> -->
<!-- <role rolename="manager-status"/> -->
<!-- <user name="admin" password="adminadmin" roles="admin,manager,admin-gui,
admin-script,manager-gui,manager-script,manager-jmx,manager-status" /> -->
</tomcat-users>

3.在Tomcat上部署測試應用

1.部署WEB網頁簡介

yum安裝的Tomcat的默認網頁路徑有兩個:/var/lib/tomcat/webapps和/usr/share/tomcat/webapps,後者是前者的軟鏈接。部署Java時一般有JAR、WAR、EAR三種包

 下面部署以WAR包爲例部署一個動態網頁,WAR包的結構以下:

一、index.jsp[可選]
二、METAINF[MAVEN自動生成目錄]
三、WEB-INF[必含]
①classes目錄:存放Java類文件
②lib目錄:所須要的jar包
③web.xml:war的描述文件
四、subdirectories[可選目錄]
存放一些網頁和照片,如:html,jsp,js,jpg等等。

2.建立Java網頁包

這裏以WAR包爲例,建立一個動態網頁

a.在默認網站根下建立項目目錄

mkdir -pv /var/lib/tomcat/webapps/test/{WEB-INF,META-INF,classes,lib}

b.建立主頁文件index.jsp(功能爲查詢session狀態)

vim /var/lib/tomcat/webapps/test/index.jsp
<%@ page language="java" %>
<html>
    <head><title>TomcatA</title></head>
    <body>
        <h1><font color="red">Tomcat.ready.com</font></h1>
        <table align="centre" border="1">
        <tr>
            <td>Session ID</td>
        <% session.setAttribute("ready.com","ready.com"); %>
            <td><%= session.getId() %></td>
        </tr>
            <tr>
                <td>Created on</td>
                <td><%= session.getCreationTime() %></td>
            </tr>
        </table>
    </body>
</html>

c.訪問http://www.ready.com/test/index.jsp

4.Nginx作反向代理負載均衡後端Tomcat

a.在主機3(IP:10.10.10.131)上安裝和主機2相同的軟件,並將主機2上/var/lib/tomcat/webapps/test/下的文件用 scp 命令發送至主機3上,修改inde.jsp爲下:

<%@ page language="java" %>
<html>
    <head><title>TomcatA</title></head>
    <body>
        <h1><font color="green">Jerrymouse.ready.com</font></h1> #修改標題顏色和內容
        <table align="centre" border="1">
        <tr>
            <td>Session ID</td>
        <% session.setAttribute("ready.com","ready.com"); %>
            <td><%= session.getId() %></td>
        </tr>
            <tr>
                <td>Created on</td>
                <td><%= session.getCreationTime() %></td>
            </tr>
        </table>
    </body>
</html>

b.在主機1上配置Nginx,在默認配置中的http模塊中插入upstream

vim /etc/nginx/nginx.conf
upstream tcsv {
      server 10.10.10.130:8080;
      server 10.10.10.131:8080;
                }
vim /etc/nginx/conf.d/tomcat.conf
server {
        listen 80;
        server_name www.ready.com;
        location  / {
                proxy_pass http://tcsv;
                }
        }

c.重啓Nginx和Tomcat,再次訪問www.ready.com

說明反代成功

相關文章
相關標籤/搜索