Web サーバーで 404 を長期間 (数日/数週間) キャッシュするソリューションを探しています。私の現在のセットアップは、キャッシュされていないページを配信するための memcached_pass プロキシと PHP-FPM を備えた NGINX です (PHP は内容を memcached にも書き込みます)。Web 中のクローラーが私のページを気に入っているようで、1 日に数千の 404 リクエストを生成しています。memcached のコンテンツと一緒に 404 応答ヘッダー情報をキャッシュできないため、それらはすべて PHP に直接ヒットします。したがって、memcached_pass ルックアップは常に失敗します。
404 を返すすべてのリクエストをキャッシュするにはどうすればよいですか? Nginx の HTTPProxModule は私が探しているものですか? それともワニスの方がいいですか?
私の現在の観点からは、セットアップ全体を変更して、nginx から memcached_pass ディレクティブを削除することに熱心ではありません。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 のいずれかの構成例は素晴らしいでしょう。
ありがとうございました!:)