2016-09-02 2 views
3

この質問は、キャッシュヘッダーとブラウザキャッシュについてではなく、nginxのキャッシュについてのみです。(完全なパスの代わりに)ファイル名だけに応じてnginxキャッシュファイルを置きます。

Iは、IDアイテムの一意な識別子である形態

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

のURLの項目の詳細を表示するアプリケーションを操作しています。生成されるHTMLページは自動生成され、アイテムに固有のものですが、ページには他のJavaScriptファイルやCSSファイルが比較的含まれています。これらのファイルは静的であり、ではなく、はアイテムIDによって異なります。アプリケーションは非常に遅く、私は可能な限り、キャッシュにnginxします。

nginxはリバースプロキシとして機能します。すべての.jsおよび.cssサブリクエストのファイル名を(URLのidを省略して)のみに設定することは可能ですか?

例:最初とhttp://my-server.tld/details/def/style.cssはその後したがって、キャッシュヒットになるはずであるhttp://my-server.tld/details/abc/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アプリケーションがunderdimensioned VMとレガシーアプリケーションサーバ上で動作する(と私はそれを変更することはできません)。各要求は遅い(待ち時間と伝送速度)、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 
     # <...> 
    } 
} 
関連する問題