前言
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的監聽端口
在server模塊模塊中加入如下代碼
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部門實習生,現加盟快手科技 ,後端研發工程師一枚
-
喜歡技術,喜歡互聯網
-
民遙控 ,趙雷、陳粒、宋冬野
-
公衆號:編程美學,時不時寫篇文章,偶爾數羊,其實說到底,只是想和你聊聊