2013-10-22 202 views
13

我在定義緩存我的靜態文件的規則時遇到了一些問題。我發現這個解決方案:NGINX緩存靜態文件

location ~* \.(ico|js|css|png|gif|jpe?g)$ { 
    expires 7d; 
} 

這實際上看起來像我所需要的。問題是,如果我把這個代碼包含到我的NGINX.conf中,那麼就不會再有靜態文件了,我的網站也是空白的。任何想法/提示可能會導致這種結果?也許我必須補充說,靜態文件分佈在不同的目錄中:/。我NGINX配置文件看起來是這樣的:

server { 
    server_name    bla.domain.com; 

    listen     80; 
    root      /var/repo/; 

    location/{ 
    default_type   text/html; 
    index     index.html; 

    if ($request_method !~ ^(GET)$) { 
     return 444; 
    } 

    if ($http_user_agent ~* LWP::Simple|BBBike|wget) { 
     return 403; 
    } 

    if ($http_referer ~* (babes|forsale|girl|jewelry|love|nudit|organic|poker|porn|sex|teen)) { 
     return 403; 
    } 
    } 

    location /bf/football/ { 
    alias /var/repos/f20; 
    } 

    location /bf/f20/ { 
    alias /var/repo/f20; 
    } 

    location /bf/zoo/ { 
    alias /var/repo/zoo/; 
    } 

    location /kbloader/ { 
    alias /var/repo/kbloader/; 
    } 
} 

將是很好,如果有人可以幫助我這個或點我在正確的方向。

乾杯, Szop

+0

你不介意,你發佈的完整配置? – alfredocambera

回答

28

把這個您的其他位置前:

location ~* \.(?:ico|css|js|gif|jpe?g|png)$ { 
     expires 30d; 
     add_header Vary Accept-Encoding; 
       access_log off; 
    } 

這應該工作。

你也可以使用此:

## All static files will be served directly. 
    location ~* ^.+\.(?:css|cur|js|jpe?g|gif|htc|ico|png|html|xml|otf|ttf|eot|woff|svg)$ { 

     access_log off; 
     expires 30d; 
     ## No need to bleed constant updates. Send the all shebang in one 
     ## fell swoop. 
     tcp_nodelay off; 
     ## Set the OS file cache. 
     open_file_cache max=3000 inactive=120s; 
     open_file_cache_valid 45s; 
     open_file_cache_min_uses 2; 
     open_file_cache_errors off; 
    } 
+1

在這種情況下,如何清除緩存?它會像重新啓動nginx一樣簡單嗎? – hamstar

+2

本示例不是服務器端緩存,它管理瀏覽器緩存。如果我們更新服務器上的靜態文件,它是否會立即爲客戶端更新新文件,或者我們必須等到它過期,才能清除瀏覽器緩存:Shift + F5/ctrl + F5 –

+0

。 – nXqd