天天看點

Nginx極簡入門(九)Nginx實作動靜分離!

前面介紹了Nginx的負載均衡,一般來說,都需要将動态資源和靜态資源分開,這樣可以很大程度的提升靜态資源的通路速度,同時在開過程中也可以讓前後端開發并行可以有效的提高開發時間,也可以有些的減少聯調時間 。接下來介紹什麼是動靜分離以及如何使用Nginx實作動靜分離。

一、什麼是動靜分離

在Web開發中,通常來說,動态資源其實就是指那些背景資源,而靜态資源就是指HTML,JavaScript,CSS,img等檔案。

動靜分離,說白了,就是将網站靜态資源(HTML,JavaScript,CSS,img等檔案)與背景應用分開部署,提高使用者通路靜态代碼的速度,降低對背景應用伺服器的請求。背景應用伺服器隻負責動态資料請求。

優勢:分擔負載,減輕web伺服器的壓力,适用于大負載。靜态資源放置cdn,同時還可以通過配置緩存到客戶浏覽器中,這樣極大減輕web伺服器的壓力。

劣勢:網絡環境不佳時,ajax回應很慢,導緻頁面出現空白,出錯處理會不好看。不利于網站SEO(搜尋引擎優化),增加了開發複雜度。

二、實作方案

動靜分離就是根據一定規則靜态資源的請求全部請求Nginx伺服器,背景資料請求轉發到Web應用伺服器上。進而達到動靜分離的目的。目前比較流行的做法是将靜态資源部署在Nginx上,而Web應用伺服器隻處理動态資料請求。這樣減少Web應用伺服器的并發壓力。具體如下圖所示:

Nginx極簡入門(九)Nginx實作動靜分離!

三、配置Nginx動靜分離

1. 修改nginx.conf配置,其中第一個location負責處理背景請求,第二個負責處理靜态資源, nginx 的其他配置,請參考前之前的文章。 具體如下所示:

#攔截靜态資源
      location ~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|js|css)$ {
        root static;
        expires      30d;  
       }          
             

上面的示例,主要是配置image、js、css等資源檔案的路徑和位址。然後設定緩存失效的時間。

完成的Nginx配置如下所示:

worker_processes  1;

events {
    worker_connections  1024;
}

http {

   server {
       listen       80;
       server_name  localhost;
      
      #攔截背景請求
      location / {
        proxy_pass http://localhost:81;
        proxy_set_header X-Real-IP $remote_addr;
      }

      #攔截靜态資源
      location ~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|js|css)$ {
        root static;
        expires      30d;  
       }

    }

}      

2. 在Nginx 下 建立 static 目錄,将圖檔,js, css 等檔案 拷貝到該目錄下

Nginx極簡入門(九)Nginx實作動靜分離!

3. 重新開機Nginx,使用指令: ./nginx -s reload 重新啟動Nginx。

四、驗證測試

Nginx 配置完成之後,在浏覽器中通路:

http://localhost

/ 檢視頁面的請求效果。

Nginx極簡入門(九)Nginx實作動靜分離!

通過浏覽器的調試工具,通過圖中紅框内容都可以看出來引用靜态資源成功了。動态請求轉發到了81端口的web應用伺服器,而靜态的資源檔案,通路的是80端口。說明Nginx的動靜分離配置成功。

最後

以上,就把如何配置Nginx動靜分離介紹完了,是不是特别簡單。

因為後面還要介紹Nginx 的優化,免不了檢視Nginx的狀态。是以這裡就提前介紹下。下篇會介紹Nginx的高性能優化,怎麼讓Nginx伺服器實作10w的并發通路量。

這是系列課程,大家關注我的微信公衆号(架構師精進),随時交流。

推薦閱讀:

Nginx極簡入門(八)Nginx性能監控及性能狀态參數詳解! Nginx極簡入門(七)Nginx的日志管理及配置 Nginx極簡入門(六)配置Nginx負載均衡,提高系統并發性能! Nginx極簡入門(五)配置Nginx反向代理 Nginx極簡入門(四)基于域名的虛拟主機配置 Nginx極簡入門(三)基于端口的虛拟主機配置 Nginx極簡入門(二)配置基于ip的虛拟主機 Nginx極簡入門(一)如何在Linux系統編譯安裝Nginx服務 Nginx極簡實戰—Nginx伺服器高性能優化配置,輕松實作10萬并發通路量