2016-09-02 94 views
3

這個問題是關於只緩存nginx,而不是緩存頭和瀏覽器緩存。讓nginx緩存文件只取決於文件名(而不是完整路徑)

我操作,顯示上的形式

http://my-server/details/<id>/ 

其中ID是該項目的唯一標識符的網址項目的詳細信息的應用程序。儘管生成的HTML頁面是自動生成的,並且對項目來說是唯一的,但該頁面相對包含其他JavaScript和CSS文件。這些文件是靜態的,並且而不是取決於項目ID。該應用程序非常慢,我希望nginx緩存任何可能的東西。

nginx充當反向代理。是否可以將所有.js和.css子請求的proxy_cache_key屬性設置爲僅文件名(省略了url中的ID)?

實施例:訪問http://my-server.tld/details/abc/style.css第一和http://my-server.tld/details/def/style.css之後應該因此導致高速緩存命中。但訪問http://my-server.tld/details/abc/http://my-server/details/def/事後不應該(生成的HTML取決於id)。

這就是我作爲基本配置的思維

server { 
    listen 80; 
    server_name my-server.tld; 

    location/{ 
    # root, doesn't matter 
    } 

    location /details { 
    # request to non-asset, cache as usual 
    } 

    location ~ ^/details/[a-z0-9]+/[a-z0-9]+\.(js|css)$ { 
    # request to static asset, use filename only as cache key 
    } 
} 
+0

你的意思是「應用程序很慢」? HTML請求很慢,或者css請求也很慢?如果css請求緩慢 - 爲什麼?它是由應用程序生成的,還是靜態文件? –

+0

@Terra應用程序運行在不足的虛擬機和遺留應用程序服務器上(我可能不會更改它)。每個請求都很慢(延遲和傳輸速度),甚至像CSS這樣的靜態資源。 – muffel

回答

6

是的,你可以定義緩存的關鍵。這裏是一個例子:

server { 
    listen 80; 
    server_name my-server.tld; 

    location/{ 
     # root, doesn't matter 
    } 

    location /details { 
     # request to non-asset, cache as usual 
    } 
    location ~ ^/details/[a-z0-9]+/(?<cache_filename>[a-z0-9]+\.(js|css))$ { 
     proxy_cache_key "/details/$cache_filename";    

     # Other configurations 
     # <...> 
    } 
} 
相關問題