HTTP/NGINX+TOMCAT實現動靜分離

什麼是TOMCAT?html

    Tomcat和其餘web服務器同樣,能夠響應HTML的請求,實際上Tomcat是Apache的服務器的擴展,可是運行時他是獨立運行的。另外它仍是一個Servlet和JSP容器,獨立的Servlet容器是Tomcat的默認模式,可是它的靜態頁面處理能力比較差。可使用動靜分離來提升站點性能。前端

JAVAjava

    Java的技術體系有三個分類:java2SE,java2EE,jave2ME(移動開發)。jdk其實至關於java2SE。java2EE至關因而在jdk中添加了一些企業級類庫,像jsp,servlet,javamail...。servlet是爲java開發提供便捷的構建web server接口,可以在前端爲咱們所寫的web應用程序提供支持http  protocol的解析功能。能接受客戶端請求,把請求轉換成本地某個代碼的執行,並把代碼執行的結果經過響應報文的方式響應給客戶端。Tomcat就是java2EE規範的不完整實現,爲啥叫不完整呢?由於Tomcat只是實現了一部分重要經常使用的類庫,不是全部的類庫。nginx

JSP處理流程程序員

    程序員寫的Jsp代碼經過jasper這個中間引擎轉換成純java代碼,java代碼須要先編譯成字節碼才能運行,經過javac compiler編譯成class類文件。類文件是servlet格式,須要調用servlet類庫到JVM中,class文件才能在JVM中運行。運行java代碼依賴不少類庫,運行前必需要加載到jvm中。因此要構建一個jsp網站,須要jdk+servlet類庫,jsp類庫。Tomcat就是企業中經常使用來實現web

    具體流程:vim

    .jsp----->jasper(屬於jsp類庫)----->.java----->java compiler(屬於servlet類庫)----->.class----->jvm(Java虛擬機)centos

Tomcat的安裝tomcat

]#yum install -y java-1.8.0-openjdk-devel            <===前提
]#java -version                                      <===查看環境準備
openjdk version "1.8.0_102"
OpenJDK Runtime Environment (build 1.8.0_102-b14)
OpenJDK 64-Bit Server VM (build 25.102-b14, mixed mode)
]#yum install tomcat tomcat-admin-webapps tomcat-docs-webapp tomcat-webapps tomcat-lib        <===後面不是必須裝,建議裝上

冷部署應用測試bash

]#mkdir  -pv /usr/share/tomcat/webapps/test/{classes,lib,WEB-INF}
]#cd /usr/share/tomcat/webapps/test
]#vim index.jsp                        <===測試頁面
<%@ page language="java" %>
<%@ page import="java.util.*" %>
<html>
        <head>
                <title>Test Page</title>
        </head>
        <body>
                <% out.println("hello world");
                %>
        </body>
</html>
]#systemctl start tomcat

測試

a44ebda4f88f7dc02656bd38d71e3200.png-wh_

在實際應用中,Tomcat是不直接接受前端客戶端的請求,前端會有調度器來調度jsp請求至tomcat server。下面咱們來簡單實現tomcat的調度。

第一種:經過http反向代理至tomcat(http和tomcat在同一臺主機上),使用proxy_http_module。

]#yum install httpd -y
]#cd /etc/httpd/conf.d
]#vim http-tomcat.conf
<VirtualHost *:80>
        servername www.a.com
        documentroot /usr/share/tomcat/webapps/ROOT
        proxyrequests off                    <===關閉正向代理
        proxyvia on                          <===響應報文中添加via首部 
        proxypreservehost on
        <proxy *>
                require all granted          <===包括下面,這兩個受權僅在centos7以上版本中使用。以前的版本不須要
        </proxy>
        proxypass / http://127.0.0.1:8080/   <===默認tomcat是在8080端口
        proxypa***everse / http:127.0.0.1:8080/
        <location />
                require all granted        
        </location>
</virtualhost>

第二種:經過http的proxy_ajp_module反向代理至tomcat

]#vim ajp-tomcat.conf 
<VirtualHost *:80>
        servername www.a.com
        documentroot /usr/share/tomcat/webapps/ROOT
        proxyrequests off
        proxyvia on
        proxypreservehost on
        <proxy *>
                require all granted
        </proxy>
        proxypass / ajp://127.0.0.1:8009/        <===ajp默認經過8009監聽
        proxypa***everse / ajp:127.0.0.1:8009/
        <location />
                require all granted
        </location>
</virtualhost>

第三種:經過nginx反向代理

]#vim nginx.conf
server {
    root /usr/share/tomcat/webapps/ROOT;
    index index.jsp index.html
    location ~* \.(jsp|do)$ {
        proxy_pass 
         }
  ......
}

    上面三種方法能夠根據本身需求和生產環境選擇,除了nginx和http有處理能力差距以外,其他並無差異。這樣經過上面的代理後,動態jsp文件轉發到tomcat處理,靜態文件代理本身處理,這樣能夠實現動靜分離,固然還能夠分的再細一點,這裏就再也不贅述了。

相關文章
相關標籤/搜索