問題
問題:nginx緩存靜態頁面怎麼區分是哪個頁面(哪個商家的頁面)?
答:根據請求url進行緩存,如產品詳情1的請求爲:127.0.0.1/detailed?id=1, 產品詳情2的請求爲127.0.0.1/detailed?id=2
nginx中根據自定義的創建緩存文件規則,會創建一個名爲1和2的文件,個個文件中存放對應的產品靜態頁面。
問題:靜態頁面緩存到nginx後,頁面數據做了修改如何更新到nginx中?
答:修改url地址上的時間戳或者使用Lua+OpenResty動態讀取後臺(京東使用的時間戳方式,通過修改url上的時間戳表示需要重新緩存到nginx),
nginx緩存的頁面(根據請求地址緩存),如果地址上的時間戳改變就放行去請求後臺返回數據並再次緩存到nginx中。
配置nginx
1. 替換掉nginx.conf配置文件中的內容:
events {
#的最大連接數(包含所有連接數)1024
worker_connections 1024; ## Default: 1024
}
http{
# 代理緩存配置,meite_cachedata爲緩存存放目錄
proxy_cache_path "./meite_cachedata" levels=1:2 keys_zone=meitecache:256m inactive=1d max_size=1000g;
server {
listen 80;
location /{
#使用緩存名稱
proxy_cache meitecache;
#對以下狀態碼實現緩存
proxy_cache_valid 200 206 304 301 302 1d;
#緩存的key(緩存的key爲請求地址)
proxy_cache_key $request_uri;
add_header X-Cache-Status $upstream_cache_status;
#反向代理地址
proxy_pass http://127.0.0.1:8080;
}
}
}
2. 在nginx目錄下創建meite_cachedata文件目錄,用於存放靜態頁面。
測試
nginx端口爲80, tomcat端口爲8080
tomcat中靜態頁面存放的位置:
1. 把靜態html等頁面放到tomcat的webapps目錄下,啓動tomcat,
即可通過ip+tomcat端口+html在webapps下的路徑127.0.0.1:8080/my/html/index.html,訪問到靜態頁面;
2. 啓動配置好的nginx,通過反向代理請求tomcat啓動的8080端口,
訪問:127.0.0.1/my/html/index.html 第一次訪問自動緩存頁面到nginx的meite_cachedata目錄中;
3. 測試是否訪問的nginx緩存,關閉tomcat,再次訪問127.0.0.1/my/html/index.html,發現還是可以訪問;
OK搞定。。。