【Nginx學習05】nginx 聯合tomcat實現動靜分離
前言
Nginx動靜分離簡單來說就是把動態跟靜態請求分開,不能理解成只是單純的把動態頁面和靜態頁面物理分離。嚴格意義上說應該是動態請求跟靜態請求分開,可以理解成使用Nginx處理靜態頁面,Tomcat、Resin出來動態頁面。
動靜分離從目前實現角度來講大致分為兩種:
一種是純粹的把靜態檔案獨立成單獨的域名,放在獨立的伺服器上,也是目前主流推崇的方案;這種的實現方案比較簡單,缺點就是需要額外的配置若干臺伺服器。
另外一種方法就是動態跟靜態檔案混合在一起釋出,通過nginx程式碼來分開。這樣也是本次課程要講解的,具體怎麼來實現呢,下面會介紹到,通過location指定不同的字尾名實現不同的請求轉發。
通過expires引數設定,可以使瀏覽器快取過期時間,減少與伺服器之前的請求和流量。具體Expires定義:是給一個資源設定一個過期時間,也就是說無需去服務端驗證,直接通過瀏覽器自身確認是否過期即可,所以不會產生額外的流量。expires的設定時間需要我們根據自身的業務情況來具體設定。
此種方法非常適合不經常變動的資源。(如果經常更新的檔案,不建議使用Expires來快取),假如我們設定為3d,表示在這3天之內訪問這個URL,傳送一個請求,比對伺服器該檔案最後更新時間沒有變化,則不會從伺服器抓取,返回狀態碼304,如果有修改,則直接從伺服器重新下載,返回狀態碼200。
正文
本文預設是在配置好tomcat 和 nginx 的基礎之上的,具體配置方法參照其他博文。
1.配置好 nginx.conf檔案
在http模組模組中加入如下程式碼
upstream mylocal{
server 106.12.129.252:8080;
}
mylocal為反向代理群的名字,一個local下面可以有很多的server
106.12.129.252:8080,為我自己的伺服器的地址,8080位我設定的tomcat的監聽埠
在http模組模組中加入如下程式碼
server程式碼中的其他程式碼我們不列出,下面是為了實現動靜分離而新增的新程式碼。
location / { proxy_next_upstream http_502 http_504 error timeout invalid_header; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass https://mylocal; } #動態部分,以php或者jsp結尾的 location ~ .*\.(php|jsp|cgi|shtml)?$ { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass https://mylocal;#跳轉到我們設定的反向代理部分,tomcat部分 } #靜態資源部分 location ~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css)$ { #靜態資源存放目錄,設定快取時間為3天 root /usr/share/nginx/html/; expires 30d; }
配置靜態資源
我們在/usr/share/nginx/html/
下新增靜態檔案,如下:
重啟nginx伺服器
nginx -s reload #reload方式是平滑的啟動nginx
在瀏覽器輸入域名驗證
此域名是我們106.12.129.252對應的域名,可知,已經成功的被反向代理到了tomcat的8080埠,實現了訪問動態資源跳轉到動態頁面。
在瀏覽器中訪問靜態資源,如下,我們訪問 index.html檔案,出現如下介面
表明已經成功實現訪問靜態資源跳轉到靜態資源頁。
關於我自己
-
一個正派但不正經的程式設計師
-
18年計算機專業碩士畢業生,騰訊SNG部門實習生,現加盟快手科技 ,後端研發工程師一枚
-
喜歡技術,喜歡網際網路
-
民遙控 ,趙雷、陳粒、宋冬野
-
公眾號:程式設計美學,時不時寫篇文章,偶爾數羊,其實說到底,只是想和你聊聊