日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

nginx 压缩和缓存设置

發布時間:2024/4/14 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 nginx 压缩和缓存设置 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

nginx js和jpg圖片緩存設置

server {

? ? listen ? ? ? 80;

? ? server_name ?localhost;

? ? index index.htm index.html;

? ? root ?/to/path/;


? ? include ? ? ? mime.types; ?#支持的格式,需要壓縮什么類型就在這個里面去找。

? ? default_type ?application/octet-stream;

#####gzip壓縮功能 ??

? ? gzip ?on;

? ? gzip_min_length 1k;

? ? gzip_buffers 16 64k;

? ? gzip_http_version 1.1;

? ? gzip_comp_level 6;

? ? gzip_types p_w_picpath/gif p_w_picpath/jpeg p_w_picpath/png text/plain application/x-javascript text/css application/xml;

? ? gzip_vary on;


?location ~ .*\.(js|css)?$

? ? ? ? {

? ? ? ? ? ? ? ? expires 5d;


? ? ? ? }


####防盜鏈

?location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$

? ? ? ? {

? ? ? ? ? ? ? ? expires 30d;

? ? ? ? ? ? ? ? valid_referers none blocked www.xxxx *.xxxxxx;

? ? ? ? ? ? ? ?if($invalid_referer) { ? ? ? ??

? ? ? ? ? ? ? ? rewrite ^/ http://www.xx.com/403.html;


}} ? ?

HTTP_Referer是header的一部分,當瀏覽器向web服務器發送請求的時候,一般會帶上Referer,告訴服務器我是從哪個頁面鏈接過來的,服務器籍此可以獲得一些信息用于處理。



nginx referer限制

語法:valid_referers [none|blocked|server_names]

使用字段:server, location

這個指令在referer頭的基礎上為 $invalid_referer 變量賦值,其值為0或1。

可以使用這個指令來實現防盜鏈功能,如果valid_referers列表中沒有Referer頭的值, $invalid_referer將被設置為1。

參數可以使如下形式:

none 意為不存在的Referer頭(表示空的,也就是直接訪問,比如直接在瀏覽器打開一個圖片)

blocked 意為根據防火墻偽裝Referer頭,如:“Referer: XXXXXXX”。

server_names 為一個或多個服務器的列表,0.5.33版本以后可以在名稱中使用“*”通配符。


舉例:


location /chat/ {?

? valid_referers none blocked so.com *.so.com;?

? if ($invalid_referer) {?

? ? return 403;?

? }?

}?






Nginx中使用Expires增強瀏覽器緩存

expires [time|epoch|max|pff]默認值:offexpires指令控制HTTP應答中的“Expires”和“Cache-Control”Header頭部信息,啟動控制頁面緩存的作用time:可以使用正數或負數。“Expires”頭標的值將通過當前系統時間加上設定time值來設定。time值還控制"Cache-Control"的值:負數表示no-cache正數或零表示max-age=time epoch:指定“Expires”的值為 1January,1970,00:00:01 GMTmax:指定“Expires”的值為31December2037 23:59:59GMT,"Cache-Control"的值為10年。-1:指定“Expires”的值為當前服務器時間-1s,即永遠過期。off:不修改“Expires”和"Cache-Control"的值


expires使用了特定的時間,并且要求服務器和客戶端的是中嚴格同步。

而Cache-Control是用max-age指令指定組件被緩存多久。

對于不支持http1.1的瀏覽器,還是需要expires來控制。所以最好能指定兩個響應頭。但HTTP規范規定max-age指令將重寫expires頭。


如果不想讓代理或瀏覽器緩存,加no-cache參數或private參數:

# expires 1d;

add_header Cache-Control no-cache;

add_header Cache-Control private;

這樣瀏覽器F5刷新時,返回的依然是200,而不是304.


記錄一個nginx控制緩存的例子:

? ? ? ?expires 1d;

? ? ? ?add_header Cache-Control no-cache;

? ? ? ?add_header Cache-Control private;

? ? ? ?if ( !-e $request_filename) {

? ? ? ?rewrite ^(.*) http://test.zhaopin.com/index.html break;

? # ? add_header Cache-Control no-cache;

? # ? add_header Cache-Control private;

當我將add_header寫在rewrite之后時,發現add_header竟然不起作用了。。是因為寫進了if里面..



apache的mod_expires模塊使得在使用expires頭時能像max-age那樣以相對的方式設置日期,通過ExpiresDefault指令完成。例如:圖片等過期時間為請求開始的10年之后

<FileMatch"\.(gif|jpg|js|css)$">

ExpiresDefault "access plus 10years"

</FileMatch>

它像響應中發送Expires頭和Cache-Control max-age頭。


expires|etag控制頁面緩存區別expires:像上面文章提到的:expires指令控制HTTP應答中的“Expires”和“Cache-Control”Header頭部信息,啟動控制頁面緩存的作用time:可以使用正數或負數。“Expires”頭標的值將通過當前系統時間加上設定time值來設定。time值還控制"Cache-Control"的值:負數表示no-cache正數或零表示max-age=time epoch:指定“Expires”的值為 1January,1970,00:00:01 GMTmax:指定“Expires”的值為31December203723:59:59GMT,"Cache-Control"的值為10年。-1:指定“Expires”的值為當前服務器時間-1s,即永遠過期。off:不修改“Expires”和"Cache-Control"的值


expires使用了特定的時間,并且要求服務器和客戶端的是中嚴格同步。

而Cache-Control是用max-age指令指定組件被緩存多久。

對于不支持http1.1的瀏覽器,還是需要expires來控制。所以最好能指定兩個響應頭。但HTTP規范規定max-age指令將重寫expires頭。一般用于頁面變化不是很快的時候,如果緩存過期了,瀏覽器在重用它之前會首先確認他是否有效,就是一個“條件GET請求”,如果有效,返回304狀態碼。expires通過Last-Modified響應頭來確定。




能夠使瀏覽器緩存的HTTP頭部信息主要有以下三種:


1、last-modified實現瀏覽器緩存

last-modified是根據文件更新時間來確定是否再次發送加載。通過返回last-modified頭部信息:


?

GET/wp-content/plugins/crayon-syntax-highlighter/js/min/crayon.min.js HTTP/1.1

Host:www.3mc2.com

User-Agent:Mozilla/5.0(Windows NT6.1;WOW64;rv:26.0)Gecko/20100101Firefox/26.0

Accept:*/*

Accept-Language:zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3

Accept-Encoding:gzip,deflate

Referer:http://www.3mc2.com/category/architecture

Cookie:wp-settings-1=hidetb%3D0%26libraryContent%3Dbrowse%26align%3Dcenter%26urlbutton%3Dnone%26editor%3Dtinymce%26wplink%3D0%26ed_size%3D508%26mfold%3Do;wp-settings-time-1=1389840828

Connection:keep-alive

?

HTTP/1.1200OK

Server:nginx

Date:Thu,16Jan201415:47:24GMT

Content-Type:application/x-javascript

Last-Modified:Thu,16Jan201402:29:13GMT

Transfer-Encoding:chunked

Connection:keep-alive

Content-Encoding:gzip

?

再次請求則帶有If-Modified-Since頭部信息,并返回404:


GET/wp-includes/js/jquery/jquery.js?ver=1.10.2HTTP/1.1

Host:www.3mc2.com

User-Agent:Mozilla/5.0(Windows NT6.1;WOW64;rv:26.0)Gecko/20100101Firefox/26.0

Accept:*/*

Accept-Language:zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3

Accept-Encoding:gzip,deflate

Referer:http://www.3mc2.com/category/architecture/nginx

Connection:keep-alive

If-Modified-Since:Thu,16Jan201402:29:13GMT

?

HTTP/1.1304Not Modified

Server:nginx

Date:Thu,16Jan201415:53:34GMT

Last-Modified:Thu,16Jan201402:29:13GMT

Connection:keep-alive

?

我的測試環境為firefox,網址中帶有”?ver=”參數的文件會再次發送請求(返回304),其他文件均未再次請求。


2、Etag確定瀏覽器緩存:

Etag的原理是將文件資源編號一個etag值,Response給訪問者,訪問者再次請求時,帶著這個Etag值,與服務端所請求的文件的Etag對比,如果不同了就重新發送加載,如果相同,則返回304.


3、Expires瀏覽器緩存:

Expires是給一個資源設定一個過期時間,也就是說無需去服務端驗證,直接通過瀏覽器自身確認是否過期即可,所以不會產生額外的流量。此種方法非常適合不經常變動的資源。如果文件變動較頻繁,不要使用Expires來緩存。


對于本博客來說,css樣式和JS腳本基本已經定型,所以最適合的方法是Expires來緩存一些內容到訪問者瀏覽器。通過配置Nginx配置文件實現相關功能:



server{

? ? .....

? ? root/www.3mc2.com;

? ? index ?index.html index.htm index.php;

? ? location~.*\.(gif|jpg|jpeg|bmp|png|ico|txt|mp3|mp4|swf){

? ? ? ? expires15d;

? ? }

? ? location~.*\.(css|js){

? ? ? ? expires12h;

? ? }

? ? ......

}


轉載于:https://blog.51cto.com/tlinux/1727390

總結

以上是生活随笔為你收集整理的nginx 压缩和缓存设置的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。