天天看點

CentOS 7.6 nginx+tomcat叢集部署反向代理+負載均衡+動靜分離

nginx+tomcat群集

    • 一、應用場景
    • 二、案例描述
    • 三、案例部署
      • 1、反向代理+負載均衡
      • 2、動靜分離

一、應用場景

Tomcat伺服器是一個免費的開放源代碼的 Web 應用伺服器,屬于輕量級應用伺服器, 在中小型系統和并發通路使用者不是很多的場合下被普遍使用,是開發和調試 JSP 程式的首選。 一般來說,Tomcat 雖然和 Apache 或者 Nginx 這些 Web 伺服器一樣,具有處理 HTML 頁面的 功能,然而由于其處理靜态 HTML 的能力遠不及 Apache 或者 Nginx,是以 Tomcat 通常是作 為一個 Servlet 和 JSP 容器,單獨運作在後端

二、案例描述

通常情況下,一台 Tomcat 站點由于可能出現單點故障及無法應付過多客戶複雜多樣的 請求等問題,不能單獨應用于生産環境下,是以需要一套更可靠的解決方案來完善 Web 站點 架構。Nginx 是一款非常優秀的 http 伺服器軟體,它能夠支援高達 50000 個并發連接配接數的響應,擁有強大的靜态資源處理能力,運作穩定,并且記憶體、CPU 等系統資源消耗非常低。目前很多大型網站都應用 Nginx 伺服器作為後端網站程式的反向代理及負載均衡器,來提升整 個站點的負載并發能力。 Nginx 是一個非常強大的靜态 web 服務,Tomcat 處理動态請求效率不高,而一般網站大 多數的内容都是靜态檔案(如圖檔、html、css、js 等),經過 Nginx 前端的反向代理加速和過濾,後端 Tomcat 處理請求的壓力便可大大減少,隻需負責處理動态内容就可以了。在性能與穩定性的權衡下,使用 Nginx+Tomcat 搭配便可讓它們在各自擅長的領域大展拳腳。

三、案例部署

CentOS 7.6 nginx+tomcat叢集部署反向代理+負載均衡+動靜分離

1、反向代理+負載均衡

環境準備:
nginx:192.168.245.204
tomcat01:192.168.245.205
tomcat02:192.168.245.206
           

----------------------------tomcat01和tomcat02都進行如下操作---------------------

安裝jdk,安裝tomcat之前必須先安裝jdk

[[email protected] opt]# tar xzvf jdk-8u91-linux-x64.tar.gz -C /usr/local    <----解壓tar包

[[email protected] opt]# vim /etc/profile   <----加入以下環境變量
export JAVA_HOME=/usr/local/jdk1.8.0_91
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH

[[email protected] opt]# source /etc/profile   <----使環境變量生效
           

安裝tomcat

[[email protected] opt]# tar xzvf apache-tomcat-8.5.16.tar.gz -C /usr/local/  <---解壓tar包

[[email protected] opt]# cd /usr/local/
[[email protected] local]# mv apache-tomcat-8.5.16/ tomcat   <---改一個好記的名字

[[email protected] local]# ln -s /usr/local/tomcat/bin/startup.sh /usr/local/bin
[[email protected] local]# ln -s /usr/local/tomcat/bin/shutdown.sh /usr/local/bin    <----将啟動關閉的指令添加軟連結,不帶路徑可以直接使用
           

建立自定義站點

[[email protected] local]# mkdir -pv /web/webapp1
mkdir: 已建立目錄 "/web"
mkdir: 已建立目錄 "/web/webapp1"
           

制作jsp網頁,顯示資訊為Welcome yjs Web

[[email protected] local]# vim /web/webapp1/index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>    '//設定支援中文字元集'
<html>
 <head>
    <title>JSP test1 page</title>
 </head>
 <body>
    <% out.println("Welcome yjs Web");%>    <-----輸出的資訊,Tomcat02節點内容設定為Welcome cloud Web'
 </body>
</html>
           

編輯tomcat的配置檔案,将站點改為自定義站點

[[email protected] local]# vim /usr/local/tomcat/conf/server.xml 
<Context docBase="/web/webapp1" path="" reloadable="false">    '//添加此段站點資訊'  
        </Context>
           
CentOS 7.6 nginx+tomcat叢集部署反向代理+負載均衡+動靜分離

啟動tomcat

[[email protected] local]# startup.sh 
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/local/jdk1.8.0_91/jre
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
           

真機驗證可以通路網頁

CentOS 7.6 nginx+tomcat叢集部署反向代理+負載均衡+動靜分離
CentOS 7.6 nginx+tomcat叢集部署反向代理+負載均衡+動靜分離

------------------------------------部署nginx代理伺服器------------------------------------

安裝nginx

[[email protected] ~]# yum -y install gcc gcc-c++ make zlib-devel pcre-devel   <---yum安裝依賴包

[[email protected] ~]# useradd -M -s /sbin/nologin nginx   <---建立程式管理使用者

[[email protected] opt]# tar xzvf nginx-1.12.0.tar.gz -C /usr/local/    <---解壓tar包

[[email protected] opt]# cd /usr/local/nginx-1.12.0/   <---自定義配置
./configure \
--prefix=/usr/local/nginx \    <---指定安裝目錄
--user=nginx \     <---指定以nginx使用者啟動nginx
--group=nginx \     <---指定以nginx使用者組啟動nginx
--with-http_stub_status_module \   <---啟用狀态統計	
--with-http_gzip_static_module \    <---啟用 gzip 靜态壓縮
--with-http_flv_module   <---啟用 flv 子產品,提供尋求記憶體使用基于時間的偏移量檔案

[root@nginx nginx-1.12.0]# make && make install    <---編譯安裝
           

修改配置檔案

[root@nginx nginx-1.12.0]# vim /usr/local/nginx/conf/nginx.conf

 #gzip  on;
        upstream tomcat_server {        <----設定負載均衡的伺服器清單,weight 參數表示權重, 權重越高,被配置設定到的機率越大。為了使測試效果比較明顯,我們把權重設定為一樣
                        server 192.168.245.205:8080 weight=1;
                        server 192.168.245.206:8080 weight=1;
                    }
    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.html index.htm;
            proxy_pass http://tomcat_server    <----把 Nginx 的預設站點通過 proxy_pass 方法代理到了設定好的 tomcat_server 負載均衡 伺服器組上
        }
           

nginx指令建立軟連結友善使用

檢查配置檔案文法

[root@nginx nginx-1.12.0]# nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
           

啟動nginx

[root@nginx nginx-1.12.0]# nginx

[root@nginx nginx-1.12.0]# netstat -anpt | grep 80
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      104628/nginx: maste 
           

真機驗證通路nginx的位址實際上是通路了下面兩台tomcat的頁面,并且輪詢顯示

CentOS 7.6 nginx+tomcat叢集部署反向代理+負載均衡+動靜分離
CentOS 7.6 nginx+tomcat叢集部署反向代理+負載均衡+動靜分離

2、動靜分離

配置nginx

[root@nginx nginx-1.12.0]# vim /usr/local/nginx/conf/nginx.conf
 #gzip  on;
        upstream tomcat_server {
                        server 192.168.245.205:8080 weight=1;
                        server 192.168.245.206:8080 weight=1;
                    }
    server {
        listen       80;
        server_name  localhost;
        location ~.*.jsp$ {   <----比對條件為以.jsp結尾的檔案
           proxy_pass http://tomcat_server;  <----代理給後端的2台tomcat伺服器處理請求
           proxy_set_header Host $host;  <----proxy_set_header用來設定被代理伺服器接收到的header資訊
         }
		  #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.html index.htm;
        }
           

配置兩台tomcat

站點目錄下,建立test目錄,把jsp網頁放到這個目錄下

[[email protected] local]# cd /web/webapp1/
[[email protected] webapp1]# mkdir test
           
[[email protected] webapp1]# cd test/
[[email protected] test]# vim index.jsp


<!DOCTYPE html>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.util.Date" %>
<%@ page import="java.text.SimpleDateFormat" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/ html14/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>動态頁面1</title>   <-----第二台是動态頁面2
</head>
<body>
<div>動态頁面1</div>   
</body>
</html>
           

真機驗證通路

http://192.168.245.204/

出現靜态頁面

CentOS 7.6 nginx+tomcat叢集部署反向代理+負載均衡+動靜分離

通路http://192.168.245.204/test/index.jsp

第一次會出現動态頁面1,重新整理,第二次出現動态頁面2

CentOS 7.6 nginx+tomcat叢集部署反向代理+負載均衡+動靜分離
CentOS 7.6 nginx+tomcat叢集部署反向代理+負載均衡+動靜分離

很多時候動态頁面的内容也不全都是動态的,比如圖檔就是靜态的,那麼我們在jsp頁面内插入一個靜态圖檔,觀察通路的結果

修改nginx配置檔案,當通路以圖檔格式結尾的檔案時,緩存30天,為了提高通路速度不用重複發送請求

#gzip  on;
        upstream tomcat_server {
                        server 192.168.245.205:8080 weight=1;
                        server 192.168.245.206:8080 weight=1;
                    }
    server {
        listen       80;
        server_name  localhost;
        location ~.*\.(gif|jpg|jpeg|png|bmg|swf|css)$ {
          root html;
          expires 30d;
         }

        location ~.*.jsp$ {
           proxy_pass http://tomcat_server;
           proxy_set_header Host $host;
         }
           

在nginx的首頁站點目錄下,也需要建立一個test目錄,将靜态圖檔放進去,因為已經實作了動靜分離,nginx會把動态頁面的請求交給tomcat處理,而靜态的通路請求就直接自己處理了不需要發給tomcat處理,是以,靜态圖檔需要放在nginx伺服器上

[[email protected] html]# cd /usr/local/nginx/html/

[[email protected] html]# mkdir test
[[email protected] html]# cd test
[[email protected] test]# ls
aca.jpg  blog.png
           

重新開機nginx服務

[[email protected] test]# pkill -9 nginx
[[email protected] test]# 
[[email protected] test]# nginx
           

tomcat01插入圖檔:

[[email protected] test]# vim index.jsp

<!DOCTYPE html>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.util.Date" %>
<%@ page import="java.text.SimpleDateFormat" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/ html14/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>動态頁面1</title>
</head>
<body>
<div>動态頁面1</div><br><img src="blog.png">  <---插入圖檔
</body>
</html>
           

tomcat02插入圖檔:

[[email protected] test]# vim index.jsp

<!DOCTYPE html>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.util.Date" %>
<%@ page import="java.text.SimpleDateFormat" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/ html14/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>動态頁面2</title>
</head>
<body>
<div>動态頁面2</div><br><img src="aca.jpg">  <---插入圖檔
</body>
</html>
           

真機驗證通路插入了圖檔的動态頁面

CentOS 7.6 nginx+tomcat叢集部署反向代理+負載均衡+動靜分離
CentOS 7.6 nginx+tomcat叢集部署反向代理+負載均衡+動靜分離

繼續閱讀