1

MonoとNginxを使用するLinuxマシンで実行されるhttpsASPMVC2Webサービスがいくつかあります。

ASP MVCの出力キャッシュ機能で動作するように構成するにはどうすればよいですか?

using System.Web.Mvc;

namespace MvcApplication1.Controllers
{
[HandleError]
public class HomeController : Controller
{
    [OutputCache(Duration=10)]
    public ActionResult Index()
    {
        return View();
    }

}
}

Webサービスを実行しているのと同じマシンにキャッシュを保存したいと思います。

この例にあるコードの多くを使用して、proxy_cacheを含め、同じマシン上の別のポートにリダイレクトして元のリクエストを実行するようにnginx構成を調整しようとしました。しかし、私はそれを機能させることができませんでした。

これが私が持っているものです:

proxy_cache_path /usr/local/nginx/proxy_temp/ levels=1:2 keys_zone=cache:10m inactive=10m max_size=250M;
proxy_temp_path /usr/local/nginx/proxy_temp/tmp;

server
{
   listen   443 ssl;
   server_name myserver.com;

   ssl_certificate /home/ubuntu/ssl/nginx_https.pem;
   ssl_certificate_key /home/ubuntu/ssl/nginx_https.key;


    location /
    {
                    proxy_set_header  X-Real-IP        $remote_addr;
                    proxy_set_header  Host             $http_host;
                    proxy_pass https://127.0.0.1:4430;
                    proxy_cache cache;
                    proxy_cache_valid 200 302 60m;
                    proxy_cache_valid 404 1m;

    }
}


server
{
   listen   4430 ssl;

   root          /var/www/mywebpage/;

   ssl_certificate /home/user/ssl/https.pem;
   ssl_certificate_key /home/user/ssl/https.key;

    location /
    {
            index index.html index.htm default.aspx Default.aspx;
            fastcgi_pass 127.0.0.1:9000;
            include /etc/nginx/fastcgi_params;
    }
}

行を追加すると:

proxy_ignore_headers Cache-Control; 

その後、キャッシュは機能しますが、すべてのキャッシュを開始します。MVCアプリでOutputCache属性でマークされたメソッドのみをキャッシュしたいのですが、Nginxキャッシュを適切に構成して処理する方法がわかりません。

NginxキャッシングシステムをMonoで実行されているASPMVCアプリの出力キャッシュ属性と結合する適切な方法は何ですか?

4

1 に答える 1

2

NginxキャッシングとASP.NETキャッシングは完全に別個のものです。ASP.NETプロジェクトで使用する場合[OutputCache]、Nginxはそれを認識しません。逆に、proxy_cache_*nginx構成のディレクティブは、ASP.NETキャッシングにまったく影響しません。

nginxを使用するか、ASP.NETを使用して、キャッシュする場所を決定する必要があります。キャッシュにNginxを使用する場合は、[OutputCache]属性を削除するか、すべてを介して出力キャッシュを無効にしますweb.config。代わりに、次のようにnginxのキャッシュゾーンごとに異なる場所を作成します。

# for your Home controller, assuming you use the /home/ route
location /home/ {
    proxy_set_header  Host             $http_host;
    proxy_pass https://127.0.0.1:4430;
    proxy_cache cache;
    proxy_cache_valid 200 302 10m;
    proxy_cache_valid 404 1m;
}
# for all other routes
location / {
    proxy_set_header  Host             $http_host;
    proxy_pass https://127.0.0.1:4430;
    # no proxy_cache here means no caching on the nginx side
}

複雑なlocationセクションを作成し、正規表現を使用してASP.NETのパス/ルートに一致させることができます。それについてはnginxのドキュメントを参照してください。

ASP.NET内からキャッシュを制御する場合は、nginx構成からすべてのproxy_cache*ディレクティブを削除し(上記の例の最後のlocationセクションのように)、directiveのような通常のASP.NETキャッシングディレクティブを使用します[OutputCache]

nginxは非常に高速で強力ですが、最初は少し読む必要があるため、nginxアプローチを使用することをお勧めします。しかし、それを知った場合は、リバースプロキシ機能を使用して、ASP.NETだけでなく、ruby、node.jsなどの他のすべてのWebアプリケーション用の強力なWebキャッシュを作成できます。

于 2012-12-29T18:28:57.470 に答える