nginx+tomcat動靜分離實現(xiàn)負(fù)載均衡

一、 簡介

1. 為什么要用nginx+tomcat動靜分離

??主要是nginx處理靜態(tài)頁面的效率遠(yuǎn)高于tomcat的處理能力,如果tomcat的請求量為1000次,則nginx的請求量為6000次,tomcat每秒的吞吐量為0.6M,nginx的每秒吞吐量為3.6M,可以說,nginx處理靜態(tài)資源的能力是tomcat處理能力的6倍,優(yōu)勢可見一斑。

2. 動靜分離原理

??服務(wù)端接收來自客戶端的請求中,有一部分是靜態(tài)資源的請求,例如html,css,js和圖片資源等等,有一部分是動態(tài)數(shù)據(jù)的請求。因為tomcat處理靜態(tài)資源的速度比較慢,所以我們可以考慮把所有靜態(tài)資源獨立開來,交給處理靜態(tài)資源更快的服務(wù)器例如nginx處理,而把動態(tài)請求交給tomcat處理。
??我們在機(jī)器上同時安裝了nginx和tomcat(或者分兩臺機(jī)器做),把所有的靜態(tài)資源都放置在nginx的webroot目錄下面,把動態(tài)請求的程序都放在tomcat的webroot目錄下面,當(dāng)客戶端訪問服務(wù)端的時候,如果是靜態(tài)資源的請求,就直接到nginx的webroot目錄下面獲取資源,如果是動態(tài)資源的請求,nginx利用反向代理的原理,把請求轉(zhuǎn)發(fā)給tomcat進(jìn)行處理,這樣就實現(xiàn)了動靜分離,提高了服務(wù)器處理請求的性能。

3.系統(tǒng)簡介及配置
IP地址 主機(jī)名 運行服務(wù) 系統(tǒng)版本 服務(wù)版本
172.19.150.104 nginx Nginx centos7.3.1611 nginx/1.6.2
172.19.150.105 tomcat Tomcat/jdk centos7.3.1611 tomcat7/jdk1.7
備注:nginx和tomcat等服務(wù)之前都已經(jīng)安裝好了。這里不再重復(fù)。(默認(rèn)都是80端口)

二、 配置動靜分離

1. 配置nginx

??Nginx的主配置文件內(nèi)有include /etc/nginx/conf.d/*.conf;所以我在/etc/nginx/conf.d/目錄下創(chuàng)建local.conf配置文件

[root@nginx conf.d]# vim local.conf 

server {
listen 80;              ##監(jiān)聽端口
server_name 172.19.150.104;
access_log /opt/nginx_log/local.log main;
location / {
index index.html;
root /var/www/html; ##主目錄
}

location ~ \.(gif|jpg|jpeg|png|bmp|swf)$ {      ##以括號內(nèi)結(jié)尾的請求,都請求nginx
root /var/www/html;                     ##主目錄
                }

location ~ \.(jsp|do)$ {                        ##以.jsp和.do結(jié)尾的,都請求tomcat
proxy_pass http://172.19.150.105;           ##tomcat的IP地址
expires 1h;                                 ##緩存一小時
                }
}
注意:如果tomcat的端口不為80在IP后邊要加端口號。不能指定從目錄

三、 驗證

1.配置nginx

在nginx主目錄里編寫index.html(屬于靜態(tài)頁面)

[root@nginx ~]# vim /var/www/html/index.html 

nginx
2.配置tomcat

在tomcat主目錄里編寫動態(tài)頁面test1.jsp

[root@tomcat ~]# vim /data/webapps/test1.jsp 

<head>
<body>
<script type="text/javascript">
function display(clock){
    var now=new Date();   //創(chuàng)建Date對象
    var year=now.getFullYear(); //獲取年份
    var month=now.getMonth(); //獲取月份
    var date=now.getDate();  //獲取日期
    var day=now.getDay();  //獲取星期
    var hour=now.getHours(); //獲取小時
    var minu=now.getMinutes(); //獲取分鐘
    var sec=now.getSeconds(); //獲取秒鐘
    month=month+1;
    var arr_week=new Array("星期日","星期一","星期二","星期三","星期四","星期五","星期六");
    var week=arr_week[day];  //獲取中文的星期
    var time=year+"年"+month+"月"+date+"日 "+week+" "+hour+":"+minu+":"+sec; //組合系統(tǒng)時間
    clock.innerHTML="當(dāng)前時間:"+time; //顯示系統(tǒng)時間
}
window.onload=function(){
    window.setInterval("display(clock)", 1000);
}
</script>
<div id="clock" ></div>
</body>
</html>
3.驗證是否成功

①直接訪問nginx


②直接訪問tomcat的jsp內(nèi)容


③通過nginx訪問tomcat的jsp


所以nginx+tomcat的動靜分離成功

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容