使用nginx+tomcat實現動靜分離

動態資源與靜態資源的區別

微微的歸納一下css

  • 靜態資源: 當用戶屢次訪問這個資源,資源的源代碼永遠不會改變的資源。
  • 動態資源:當用戶屢次訪問這個資源,資源的源代碼可能會發送改變。

什麼是動靜分離

動靜分離是讓動態網站裏的動態網頁根據必定規則把不變的資源和常常變的資源區分開來,動靜資源作好了拆分之後,咱們就能夠根據靜態資源的特色將其作緩存操做,這就是網站靜態化處理的核心思路。html

爲何要用動靜分離

在咱們的軟件開發中,有些請求是須要後臺處理的(如:.jsp,.do等等),有些請求是不須要通過後臺處理的(如:css、html、jpg、js等等文件),這些不須要通過後臺處理的文件稱爲靜態文件,不然動態文件。所以咱們後臺處理忽略靜態文件。這會有人又說那我後臺忽略靜態文件不就完了嗎。固然這是能夠的,可是這樣後臺的請求次數就明顯增多了。在咱們對資源的響應速度有要求的時候,咱們應該使用這種動靜分離的策略去解決。動靜分離將網站靜態資源(HTML,JavaScript,css,img等文件)與後臺應用分開部署,提升用戶訪問靜態代碼的速度,下降對後臺應用訪問。這裏咱們將靜態資源放到nginx中,動態資源轉發到tomcat服務器中。所以,動態資源轉發到tomcat服務器咱們就使用到了前面講到的反向代理了。nginx

在nginx中的配置

###靜態資源訪問
    server {
      listen       80;
      server_name  static.itmayiedu.com;
      location /static/imgs {
            root D:/; #會直接匹配D:下的static/imgs目錄的 D:/static/imgs
           index  index.html index.htm;
       }
    }
   ###動態資源訪問
     server {
      listen       80;
      server_name  www.kingstone.com; // 去hosts文件中配置

      location / {
         proxy_pass http://127.0.0.1:8080;
         index  index.html index.htm;
       }
    }

tip

圖片這種靜態資源,再次訪問的話,會出現304狀態碼。這不是一種錯誤,而是對客戶端有緩存狀況下服務端的一種響應。數據庫

不明覺厲的解釋:瀏覽器

客戶端在請求一個文件的時候,發現本身緩存的文件有 Last Modified ,那麼在請求中會包含 If Modified Since ,這個時間就是緩存文件的 Last Modified 。所以,若是請求中包含 If Modified Since,就說明已經有緩存在客戶端。服務端只要判斷這個時間和當前請求的文件的修改時間就能夠肯定是返回 304 仍是 200 。
對於靜態文件,例如:CSS、圖片,服務器會自動完成 Last
Modified 和 If Modified Since 的比較,完成緩存或者更新。可是對於動態頁面,就是動態產生的頁面,每每沒有包含 Last Modified 信息,這樣瀏覽器、網關等都不會作緩存,也就是在每次請求的時候都完成一個 200 的請求。
所以,對於動態頁面作緩存加速,首先要在 Response 的
HTTP Header 中增長 Last Modified 定義,其次根據 Request 中的 If Modified Since 和被請求內容的更新時間來返回 200 或者 304 。雖然在返回
304 的時候已經作了一次數據庫查詢,可是能夠避免接下來更多的數據庫查詢,而且沒有返回頁面內容而只是一個
HTTP Header,從而大大的下降帶寬的消耗,對於用戶的感受也是提升
相關文章
相關標籤/搜索