開啓ETAG
ETag全稱EntityTags,HTTP協議規格說明中定義“ETag”爲“被請求變量的實體值”。我們也可以把ETag理解爲是一個客戶端與服務器關聯的記號。這個記號告訴客戶端,當前網頁在上次請求之後是否有發生變化,當發生變化時,ETag的值重新計算,並返回200狀態碼。如果沒有變化,返回304狀態碼。從而不會重新加載整個頁面信息。
以下會告訴你,Nginx如何開啓ETag。
步驟1
確認Nginx版本,命令:Nginx安裝目錄/sbin/nginx–v,
版本爲1.7.3及更高,繼續步驟2;版本爲1.7.3以下,1.3.3及以上,進行步驟3;版本爲1.3.3以下,不支持ETag,請升級您的Nginx。
步驟2
確認沒有關閉ETag:打開Nginx的配置文件nginx.conf(默認位置Nginx安裝目錄/conf/),確保其中沒有出現etagoff;,下圖爲出現的情況,請將此行刪除。
確認沒有使用ngx_headers_more清除ETag頭:同樣在配置文件中不能出現如下語句的任意一句,如果出現請將其刪除。
重新啓動Nginx,就啓用ETag功能了。
步驟3
查看是否開啓了gzip,且是否和etag出現衝突,出現衝突去步驟4,沒有去步驟2。
打開Nginx的配置文件nginx.conf(默認位置Nginx安裝目錄/conf/),其中出現gzip on;語句證明開啓了gzip,如圖
開啓gzip時,可能與etag出現衝突,用瀏覽器多次請求此網站的靜態元素,如果只返回200,不返回304,證明存在衝突,請去步驟4;沒有衝突去步驟2。
步驟4
請關閉gzip,即將上一步中的gzipon;改爲gzip off;然後去步驟2。
若不想關閉gzip,並要開啓ETag,同時仍要堅持使用當前的Nginx版本,只能修改源碼並重新編譯。
下載此版本安裝包並解壓,將其目錄下/src/http/modules/ngx_http_gzip_filter_module.c
文件中約309行左右的ngx_http_clear_etag(r);一行註釋掉或刪掉。如下圖
如果沒有找到ngx_http_clear_etag(r);而是發現ngx_http_weak_etag(r);如下圖,證明此Nginx
沒有gzip和etag衝突的問題,不必進行任何修改。
重新編譯源碼安裝Nginx,解決這個衝突,然後去步驟2。
開啓LASTMODIFIED
第一在nginx.conf裏設置
1 |
|
第二在具體的location段裏
1 2 3 4 5 |
|
PS:$date_gmt是內嵌變量,具體參考ngx_http_ssi_module模塊