天天看點

Nginx動靜分離基本概念前言如何實作總結

前言

之前項目中需要用到百度地圖,由于項目的特殊環境,是以需要下載下傳百度的離線地圖。我們知道,地圖的展示其實就是一張張地圖的圖檔展示,我們在網頁上浏覽查找位置的時候,其實都是在發送圖檔請求。這些圖檔請求相對于jsp,servlet來說就是所謂的靜态資源,當然服務中的靜态資源不僅僅隻是圖檔,像頁面樣式css檔案,js腳本檔案這些都可以看着是靜态資源。tomcat既可以靜态資源也可以處理動态資源。但是單節點的tomcat本身處理請求的資源是有限的,如果項目中的tomcat既處理動态請求有要處理大量的靜态資源。顯然是不合理的,也就是會遇到tomcat的性能瓶頸問題,對于靜态資源的處理我們有更好的伺服器像Nginx,Apache.他們處理靜态資源的能力比Tomcat強很多,那麼我們能不能對請求進行分工呢?靜态資源的請求由Nginx來處理,像jsp我們交給tomcat來處理。這樣也能減輕tomcat的處理壓力。

如何實作

對于上面的動靜分離想必大家都已經了解了,那麼具體nginx是如何實作動靜分離的呢?這裡簡單的搭建個小例子。

這裡先是在本地tomcat中啟動一個小demo,服務中就是一個簡單的jsp頁面,頁面中包含一張圖檔。我們再啟動Nginx作為反向代理,在nginx的配置檔案中,配置代理的tomcat服務ip以及端口,還是靜态資源的root路徑,具體Nginx配置檔案關鍵配置如下

server {
        listen       80;
        server_name  localhost;
	location / {
            proxy_next_upstream http_502 http_504 error timeout invalid_header;
            proxy_pass http://localhost:8082;
            # 真實的用戶端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 /static;
		expires 30d;
	}
	#靜态檔案交給nginx處理
	location ~ .*\.(js|css)?$
	{
		root /static;
		expires 1h;
	}
 
        #error_page  404              /404.html;
 
        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
           

頁面中的圖檔是放在了和Nginx同級目錄的static檔案夾下面,static檔案夾在Nginx目錄下沒有,需建立,和conf檔案夾同級,也可以自定義。如果我們直接通路tomcat下面的index頁面,輸入 http://localhost:8082/tomcattest/由于tomcat服務中并沒有頁面的中mingren.jpg。是以圖檔是沒有展示的,如下圖

Nginx動靜分離基本概念前言如何實作總結

 接着我們通路Nginx監聽的80端口,http://localhost/tomcattest,圖檔展示

Nginx動靜分離基本概念前言如何實作總結

我們也可以在浏覽器中看到,圖檔中的緩存時間和Nginx中配置的緩存時間也是一緻的

Nginx動靜分離基本概念前言如何實作總結

總結

上面簡單的介紹了如何利用Nginx實作請求的動靜分離。以及具體為什麼要動靜分離。其實實作動靜分離是在Nginx反向代理的基礎上實作。對于Nginx,我們後面再繼續深入學習。

繼續閱讀