一、 簡介
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