訪問個人博客css
最新公司新開了一個項目,項目由我來配置基礎環境,會寫一系列的教程來展現,一個網站從零到上線的整個過程。首先本文介紹資源文件的隔離。html
爲何要將靜態資源文件與動態請求進行分離? 爲了下降 Tomcat 服務器的負載,能夠經過本文設置並結合 CDN 來實現來更完全地下降服務器的負載。java
如圖所示,全部的請求都壓到了同一臺服務器上, 不管靜態仍是動態的請求,這樣流量大的話勢必會形成服務器的負載太高,由於動靜分離是必不可少的。nginx
首先這是咱們項目的目錄結構, resource 目錄和 **_res** 目錄中都是靜態資源文件,存放好比 js/css/img 等資源。這兩個目錄下的文件有所不一樣,**_res** 目錄下面是壓縮版本的,好比壓縮的js/css。經過 Git 或者 SVN 將項目上傳到服務器上後,配置 Nginx 來完成靜態資源的分離。vim
首先看一張圖(圖的來源是:http://www.cnblogs.com/xiaoblog/p/4241086.html)api
當請求通過 Nginx 時,若是是靜態資源的請求,就直接返回主機上靜態資源便可, 若是是動態請求,則去請求 Tomcat 服務器後再返回。若是流量不是很大,靜態資源能夠和 Tomcat 服務器放在同一臺主機上,不然須要將靜態資源與 Tomcat 服務器分開。瀏覽器
我司對於資源文件的作法是新建一個二級域名,該域名只用於加載靜態資源文件。如 res.domain.com,這樣作的好處是簡化了在 Nginx 的 配置。服務器
首先須要安裝 Nginx, 能夠參考個人另一篇文章 Nginx實現Tomcat集羣。這裏只須要參考到安裝 Nginx 便可。dom
Nginx 靜態資源配置ide
打開 Nginx 配置文件
vim /usr/local/nginx/conf/nginx.conf
添加 server
server { # 只接收靜態資源請求 listen 80; server_name res.domain.com; charset utf8; default_type text/plain; add_header Access-Control-Allow-Origin *; #access_log logs/heiyan.image.access.log click; location ~* \.(zip|rar|gz|tar.gz|gz|exe)$ { return 500; } location / { #資源文件的目錄 root /home/resources; index index.html; expires 30d; default_type text/plain; } } server { # 接收動態請求 listen 80; server_name www.domain.com; charset utf8; access_log logs/access.log main; location / { proxy_pass http://127.0.0.1:8080; } }
在 Nginx 的配置文件中指定了資源文件的目錄爲 /home/resources ,因此須要將資源拷貝到該目錄下,進入上文下載的項目的目錄中,將資源目錄(我這裏是**_res目錄)拷貝到 /home/resources**目錄下面。
cp -r _res /home/resources
拷貝完成後的目錄應該是: /home/resources/_res
在 **/home/resources/_res** 目錄下放一張圖片 a.jpg ,用於測試。
啓動 Nginx
打開瀏覽器訪問: http://res.domain.com/_res/a.jpg
若是是動態請求,則使用 http://www.domain.com
域名
返回結果:
由於靜態資源文件包含 css/js 等文件,修改提交後須要拷貝增量與修改的文件到 /home/resources 目錄下,若是嫌麻煩,能夠直接在 Nginx 配置文件中,配置 路徑爲項目的資源文件夾根路徑,好比 **/home/wide-api/src/main/java/resources/_res**, 這種在更新代碼以後,能夠直接請求到新的資源文件。以後會寫一篇經過阿里雲CDN來完成靜態分離。
注: 因爲個人是在虛擬機上的 Nginx 進行測試,也沒有域名,且是minimal版本系統,沒有桌面環境,因此須要配置宿主機的hosts, 在宿主機的瀏覽器中訪問。在真實服務器且有本身綁定到服務器上域名的就直接測試便可。
使用 SwitchHosts 軟件 配置 hosts,個人虛擬機 ip 爲192.168.200.129
192.168.200.129 www.domain.com res.domain.com