1

Web サーバーで 404 を長期間 (数日/数週間) キャッシュするソリューションを探しています。私の現在のセットアップは、キャッシュされていないページを配信するための memcached_pa​​ss プロキシと PHP-FPM を備えた NGINX です (PHP は内容を memcached にも書き込みます)。Web 中のクローラーが私のページを気に入っているようで、1 日に数千の 404 リクエストを生成しています。memcached のコンテンツと一緒に 404 応答ヘッダー情報をキャッシュできないため、それらはすべて PHP に直接ヒットします。したがって、memcached_pa​​ss ルックアップは常に失敗します。

404 を返すすべてのリクエストをキャッシュするにはどうすればよいですか? Nginx の HTTPProxModule は私が探しているものですか? それともワニスの方がいいですか?

私の現在の観点からは、セットアップ全体を変更して、nginx から memcached_pa​​ss ディレクティブを削除することに熱心ではありません。php がリクエストを memcached にキャッシュできる (すべき) かどうかを決定するため、これまでのところかなりきれいです。必要に応じてキャッシュをフラッシュするのも非常に簡単です。

私の現在のNGINX構成ファイル:

server {
    listen       80;
            server_name  _;


            gzip  on;
            gzip_http_version 1.0;
            gzip_vary on;
            gzip_comp_level 6;
            gzip_proxied any;
            gzip_types text/plain text/html text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;

    location / {
                    gzip  on;
        default_type  "text/html; charset=utf-8";
                    charset         utf-8;
                    add_header  Content-Encoding    gzip;

         if ($request_method = GET)
        {
                expires      max;
                set $memcached_key $http_host$request_uri;
                memcached_pass     127.0.0.1:11211;
                error_page         404 = @fallback;
                #error_page 502 = @fallback;
                break;
        }

        root   /var/www/html/;
        index  index.php index.html;

        if (!-e $request_filename) {
            rewrite  ^/(.*)$  /index.php?q=$1  last;
            break;
        }

    }



    location @fallback {
                    internal;
        root   /var/www/html/;
        index  index.php index.html;

        if (!-e $request_filename) {
            rewrite  ^/(.*)$  /index.php?q=$1  last;
            break;
        }


    }

    location ~ \.php$ {
        root   /var/www/html/;
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param  SCRIPT_FILENAME  /var/www/html/$fastcgi_script_name;
                 include /etc/nginx/fastcgi_params;
    }


}

Nginx または Varnish のいずれかの構成例は素晴らしいでしょう。

ありがとうございました!:)

4

1 に答える 1

0

fastcgi_cache_valid ディレクティブを使用します: http://wiki.nginx.org/HttpFcgiModule#fastcgi_cache_valid

于 2011-10-14T12:41:03.093 に答える