Nginx + Tomcat動靜分離 (轉)

什麼是動靜分離javascript

  爲了提升網站的響應速度,減輕程序服務器(Tomcat,Jboss等)的負載,對於靜態資源好比圖片,js,css等文件,咱們能夠在反向代理服務器中進行緩存,這樣瀏覽器在請求一個靜態資源時,代理服務器就能夠直接處理,而不用將請求轉發給後端服務器。用戶請求的動態文件好比servlet,jsp則轉發給Tomcat,Jboss服務器處理,這就是動靜分離。這也是反向代理服務器的一個重要的做用。css

  本文的動靜分離主要是經過nginx+tomcat來實現,其中nginx處理圖片、html、JS、CSS等靜態文件,tomcat處理jsp、servlet等動態請求。html

  基礎知識瞭解完後,我們來具體實踐一下動靜分離的感受。負載均衡在這篇博客就不在介紹了,可是一樣會配置出來,實現動靜分離和負載均衡的效果。前端

動靜分離結構

         

 

服務器 java

     

 

 Nginx服務器作負載均衡和動靜分離,服務器A,B作集羣。node

 

創建JSP動態頁面nginx

<%@ page language="java" contentType="text/html; charset=GB18030" pageEncoding="GB18030"%> <HTML> <head> <meta http-equiv="Content-Type" content="text/html; charset=GB18030"> <title>Nginx動靜分離測試</title> </head> <body> <h1>您正在訪問:192.168.32.229</h1> <img src="/testweb/img/girl.jpg" alt="美女" /> </body> </html>

 jsp放到testweb目錄中,添加一個圖片標籤,加載Tomcat根目錄下 webapps/testweb/img/girl.jpg圖片文件。啓動Tomcat測試是否可以訪問。web

 瀏覽器輸入網址:http://192.168.32.229:8080/testweb/index.jsp後端


 在228服務器上一樣創建上述文件和目錄.

瀏覽器

對Nginx進行配置

 經過配置location,對訪問的請求進行攔截,①②都須要配置。

 ① 所有的請求均轉發給Tomcat進行處理

location / { proxy_next_upstream http_502 http_504 error timeout invalid_header; proxy_pass http://mycluster; # 真實的客戶端IP proxy_set_header X-Real-IP $remote_addr; # 請求頭中Host信息 proxy_set_header Host $host; # 代理路由信息,此處取IP有安全隱患 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 真實的用戶訪問協議 proxy_set_header X-Forwarded-Proto $scheme; }

 ② 個別的請求好比:html,js,css等靜態資源請求,由Nginx進行處理

#靜態文件交給nginx處理 location ~ .*\.(htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$ { root /usr/local/webapps; expires 30d; } #靜態文件交給nginx處理 location ~ .*\.(js|css)?$ { root /usr/local/webapps; expires 1h; }

  root /usr/local/webapps; 這段代碼的意思是指定Nginx訪問的目錄,即靜態資源所在的目錄。

  expires 30d; 指定這些資源文件在客戶端瀏覽器的緩存時間。30d指的是30天,1h指的是1小時。

 

完整的Nginx配置文件

user nobody; worker_processes 2; events{ worker_connections 1024; } http{ #設置默認類型爲二進制流 default_type application/octet-stream; server_names_hash_bucket_size 128; #指定來自客戶端請求頭的headerbuffer大小,設置爲32KB client_header_buffer_size 32k; #指定客戶端請求中較大的消息頭的緩存最大數量和大小,這裏是4個32KB large_client_header_buffers 4 32k; #上傳文件大小 client_max_body_size 356m; #nginx的HttpLog模塊指定,指定nginx日誌的輸出格式,輸出格式爲access log_format access '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; #access日誌存在未知 access_log /var/log/nginx/access.log access; #開啓高效模式文件傳輸模式,將tcp_nopush和tcp_nodelay兩個指另設置爲on,用於防止網絡阻塞。 sendfile on; tcp_nopush on; tcp_nodelay on; #設置客戶端鏈接保持活動的超時時間 keepalive_timeout 65; server_tokens off; #客戶端請求主體讀取緩存 client_body_buffer_size 512k; proxy_connect_timeout 5; proxy_send_timeout 60; proxy_read_timeout 5; proxy_buffer_size 16k; proxy_buffers 4 64k; proxy_busy_buffers_size 128k; proxy_temp_file_write_size 128k; #開啓gzip gzip on; #容許壓縮的最小字節數 gzip_min_length 1k; #4個單位爲16k的內存做爲壓縮結果流緩存 gzip_buffers 4 16k; #設置識別HTTP協議版本,默認是1.1 gzip_http_version 1.1; #gzip壓縮比,可在1~9中設置,1壓縮比最小,速度最快,9壓縮比最大,速度最慢,消耗CPU gzip_comp_level 2; #壓縮的類型 gzip_types text/plain application/x-javascript text/css application/xml; #讓前端的緩存服務器混村通過的gzip壓縮的頁面 gzip_vary on; upstream mycluster{ server 192.168.32.229:8080 weight=1; server 192.168.32.230:8080 weight=1; } server{ listen 8080; server_name 192.168.32.228; charset utf-8; #設置編碼爲utf-8; #location / { # root html; # index index.html index.htm; #} #location ~ .*\.(jsp|do|action)$ location / { proxy_next_upstream http_502 http_504 error timeout invalid_header; proxy_pass http://mycluster; # 真實的客戶端IP proxy_set_header X-Real-IP $remote_addr; # 請求頭中Host信息 proxy_set_header Host $host; # 代理路由信息,此處取IP有安全隱患 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 真實的用戶訪問協議 proxy_set_header X-Forwarded-Proto $scheme; } #靜態文件交給nginx處理 location ~ .*\.(htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$ { root /usr/local/webapps; expires 30d; } #靜態文件交給nginx處理 location ~ .*\.(js|css)?$ { root /usr/local/webapps; expires 1h; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } }

測試Nginx動靜分離

  根據上述配置文件,完成動靜分離和負載均衡的配置,而後啓動Nginx。
  訪問網址:http://192.168.32.228:8080/testweb/index.jsp


  能夠看到圖片沒有加載出來。這是由於靜態資源訪問請求已經被Nginx攔截,由Nginx進行處理。可是Nginx服務器的 /usr/local/webapps 目錄下並無圖片資源,因此圖片沒有加載出來。index.jsp頁面可以顯示,說明動態的請求已經轉發到了Tomcat,Tomcat對index.jsp進行了解析。

  在Nginx服務器 /usr/local/webapps 目錄下放置圖片文件,將tomcat上testweb整個目錄拷貝到其中。


  而後再次刷新瀏覽器,圖片可以正常顯示。

小結

  從上述的實例能夠看到已經初步實現了Nginx動靜分離的功能,在配置動靜分離後,用戶請求你定義的靜態資源,默認會去nginx的發佈目錄請求,而不會到後端請求,這樣能夠提升網站響應速度,減輕真實Web服務器的負載壓力。

  不過在開發環境下,爲了便於開發,我們的靜態資源和代碼仍是放在一塊兒的,等開發測試完成,纔會將完成的完整程序部署到生成環境上,然而程序代碼和靜態資源是分別放置到不一樣的服務器上的。

出處:https://blog.csdn.net/zsj777/article/details/80241558

相關文章
相關標籤/搜索