nginx實(shí)現(xiàn)tomcat動(dòng)靜分離詳解
1.為什么要實(shí)現(xiàn)動(dòng)靜分離
1)nginx的處理靜態(tài)資源能力超強(qiáng)
主要是nginx處理靜態(tài)頁(yè)面的效率遠(yuǎn)高于tomcat的處理能力,如果tomcat的請(qǐng)求量為1000次,則nginx的請(qǐng)求量為6000次,tomcat每秒的吞吐量為0.6M,nginx的每秒吞吐量為3.6M,可以說(shuō),nginx處理靜態(tài)資源的能力是tomcat處理能力的6倍,優(yōu)勢(shì)可見(jiàn)一斑。
2)動(dòng)態(tài)資源和靜態(tài)資源分開(kāi),使服務(wù)器結(jié)構(gòu)更清晰。
2.動(dòng)靜分離原理
服務(wù)端接收來(lái)自客戶端的請(qǐng)求中,有一部分是靜態(tài)資源的請(qǐng)求,例如html,css,js和圖片資源等等,有一部分是動(dòng)態(tài)數(shù)據(jù)的請(qǐng)求。因?yàn)閠omcat處理靜態(tài)資源的速度比較慢,所以我們可以考慮把所有靜態(tài)資源獨(dú)立開(kāi)來(lái),交給處理靜態(tài)資源更快的服務(wù)器例如nginx處理,而把動(dòng)態(tài)請(qǐng)求交給tomcat處理。
如下圖所示,我們?cè)跈C(jī)器上同時(shí)安裝了nginx和tomcat,把所有的靜態(tài)資源都放置在nginx的webroot目錄下面,把動(dòng)態(tài)請(qǐng)求的程序都放在tomcat的webroot目錄下面,當(dāng)客戶端訪問(wèn)服務(wù)端的時(shí)候,如果是靜態(tài)資源的請(qǐng)求,就直接到nginx的webroot目錄下面獲取資源,如果是動(dòng)態(tài)資源的請(qǐng)求,nginx利用反向代理的原理,把請(qǐng)求轉(zhuǎn)發(fā)給tomcat進(jìn)行處理,這樣就實(shí)現(xiàn)了動(dòng)靜分離,提高了服務(wù)器處理請(qǐng)求的性能。

3.動(dòng)靜分離的詳細(xì)配置
1)首先熟悉下nginx的重要配置文件nginx.conf
user nginx;
worker_processes 1;
error_log logs/error.log;
pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#日志格式定義
log_format main '$remote_addr - $remote_user[$time_local] "$request" '
'$status $body_bytes_sent"$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log logs/access.log main;
sendfile on;
keepalive_timeout 65;
#gzip壓縮功能設(shè)置
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.0;
gzip_comp_level 2;
gzip_types text/plain application/x-javascripttext/css application/xml;
gzip_vary on;
server {
listen 80;
server_name www.test.com;
location / {
#jsp網(wǎng)站程序根目錄,一般nginx與tomcat在同一個(gè)目錄
root /usr/local/tomcat/webapps/ROOT;
index index.html index.jsp index.html;
}
location ~ .*.jsp$ {
index index.jsp;
proxy_pass http://127.0.0.1:8080; #來(lái)自jsp請(qǐng)求交給tomcat處理
proxy_redirect off;
proxy_set_header Host $host; #后端的Web服務(wù)器可以通過(guò)X-Forwarded-For獲取用戶真實(shí)IP
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m; #允許客戶端請(qǐng)求的最大單文件字節(jié)數(shù)
client_body_buffer_size 128k; #緩沖區(qū)代理緩沖用戶端請(qǐng)求的最大字節(jié)數(shù)
proxy_connect_timeout 90; #nginx跟后端服務(wù)器連接超時(shí)時(shí)間(代理連接超時(shí))
proxy_read_timeout 90; #連接成功后,后端服務(wù)器響應(yīng)時(shí)間(代理接收超時(shí))
proxy_buffer_size 4k; #設(shè)置代理服務(wù)器(nginx)保存用戶頭信息的緩沖區(qū)大小
proxy_buffers 6 32k; #proxy_buffers緩沖區(qū),網(wǎng)頁(yè)平均在32k以下的話,這樣設(shè)置
proxy_busy_buffers_size 64k;#高負(fù)荷下緩沖大?。╬roxy_buffers*2)
proxy_temp_file_write_size 64k; #設(shè)定緩存文件夾大小,大于這個(gè)值,將從upstream服務(wù)器傳
}
location ~ .*\.(gif|jpg|png|bmp|swf)$ #由nginx處理靜態(tài)頁(yè)面
{
expires 30d; #使用expires緩存模塊,緩存到客戶端30天
}
location ~ .*\.( jsp|js|css)?$
{
expires 1d;
}
error_page 404 /404.html; #錯(cuò)誤頁(yè)面
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
2)配置動(dòng)靜分離
#配置Nginx動(dòng)靜分離,定義的靜態(tài)頁(yè)面直接從Nginx發(fā)布目錄讀取。
location ~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css)$ {
root /webapps/myproject/code/static-resource;
#expires定義用戶瀏覽器緩存的時(shí)間為7天,如果靜態(tài)頁(yè)面不常更新,可以設(shè)置更長(zhǎng),這樣可以節(jié)省帶寬和緩解服務(wù)器的壓力
expires 1d;
}
location ~ ^/(WEB-INF)/ {#這個(gè)很重要,不然用戶就可以訪問(wèn)了
deny all;
}
這里需要注意,外部靜態(tài)文件的存放路徑,應(yīng)當(dāng)與請(qǐng)求中路徑一致,以免nginx拼接路徑后,由于路徑不存在而找不到文件。如果出現(xiàn)js、css等不加載的情況,可以查看nginx的errorlog進(jìn)行調(diào)試修正,日志位于nginx目錄下的logs目錄內(nèi),如下截取一段錯(cuò)誤的日志:
[error] 7195#0: *1693 open() "/home/cms/include/dedeajax2.js" failed (2: No such file or directory), client: 101.226.35.225, server: localhost, request: "GET /cms/include/dedeajax2.js HTTP/1.1"
可以看到,GET請(qǐng)求是 “ /cms/include/dedeajax2.js ”,這時(shí)nginx就會(huì)在配置中的 /home 下,尋找這一路徑的文件,完整路徑為:
/home/cms/include/dedeajax2.js
報(bào)錯(cuò)為 no such file or directory ,就可以在對(duì)應(yīng)的 /home 目錄下看文件路徑的問(wèn)題。
配置成功后,就可以發(fā)現(xiàn)靜態(tài)文件通過(guò)nginx處理了,靜態(tài)文件的請(qǐng)求不再進(jìn)入tomcat服務(wù)器,從而可以打包時(shí),靜態(tài)文件的目錄如js、css等不再打進(jìn)war包。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Nginx配合Apache或Tomcat的動(dòng)靜分離基本配置實(shí)例
- 簡(jiǎn)單實(shí)現(xiàn)nginx+tomcat的反向代理與動(dòng)靜分離
- 使用Nginx+uWsgi實(shí)現(xiàn)Python的Django框架站點(diǎn)動(dòng)靜分離
- nginx實(shí)現(xiàn)負(fù)載均衡和動(dòng)靜分離
- nginx實(shí)現(xiàn)動(dòng)靜分離實(shí)例講解
- Nginx實(shí)現(xiàn)動(dòng)靜分離的示例代碼
- nginx實(shí)現(xiàn)動(dòng)靜分離的方法示例
- 部署Nginx+Apache動(dòng)靜分離的實(shí)例詳解
- Nginx+Tomcat實(shí)現(xiàn)負(fù)載均衡、動(dòng)靜分離的原理解析
- 使用nginx實(shí)現(xiàn)動(dòng)靜分離
相關(guān)文章
解讀Nginx和Apache的特點(diǎn)與區(qū)別
這篇文章主要介紹了解讀Nginx和Apache的特點(diǎn)與區(qū)別,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-03-03
Nginx 解決504錯(cuò)誤超時(shí)問(wèn)題小結(jié)
Nginx HTTPS實(shí)現(xiàn)原理及配置實(shí)踐

