Nginx如何啓用ETag 和 lastmodified

開啓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

if_modified_since off|on;

第二在具體的location段裏

1

2

3

4

5

location ~* \.(?:manifest|appcache|html?|xml|json)$ {

 # add_header  Last-Modified $date_gmt;

  # add_header  Last-Modified ""; #不想要就置空

 # add_header  Cache-Control "public";

}

PS:$date_gmt是內嵌變量,具體參考ngx_http_ssi_module模塊

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章