hamada
bungu****@leo*****
2008年 3月 12日 (水) 12:39:47 JST
こんにちわ。 負荷対策として 「クローラーに503を返す方法」 を暫く試してみてましたが、実際にやってみて解析したトコロ、 「やっぱりこれは色々とダメそう」 という事が、段々解ってきました。 激しくツっ込まれるのは、やはりそれなりの理由が有ったらしいです。考えが浅 かったです。どーも色々とすみません(^^;) 503を食らわせたら、更にハイペース化するとは…(^^;; Google ウェブマスター ツールに > 503 (サービスは利用できません) がずらりと並ぶのもイヤだし。 当方はこの機会にApacheやMySQLの設定を見直しまして、こちらもそれなりの効 果が出ました。 # netstat -nt | grep -c ':80' とかやって、記録されるHTTP接続数にちとビビったりとか。 で、今回はキャッシュを試してみました。 基本的に [PHPプロ!] お手軽にページのキャッシュを行う方法 http://codezine.jp/a/article/aid/1027.aspx ↑コレ、そのままです。キャッシュを読む条件に「非ログイン時」とか一言付け 加えたり、URLをスクリプト名にしてるだけ。 キャッシュをスクリプト単位にしてるので、product_info.phpみたくパラメータ を伴うファイルには対応しません。そういう仕様です。 osCだとall_productsみたいな、パラメータが無く、DB負荷が大で、頻繁に内容 が変わらず、閲覧頻度の高いページに向いてると思います。 この工事には(割と明瞭な)デメリットがありますので、適用する場合は、工事 内容を理解出来る方が自己責任でご導入ください。 当方はまったく責任を負えません。 そもそもDBキャッシュが効く環境なら、あまりメリットは無いかも。 導入手順> 1. キャッシュディレクトリ(例では/var/www/cache/)を777で掘る 2. /catalog/includesにstart_cache.phpとend_cache.phpを置く 3. キャッシュしたいファイルの > require('includes/application_top.php'); の直下に > include(DIR_WS_INCLUDES . 'start_cache.php'); を追記。 4. キャッシュしたいファイルの末尾に > <?php include(DIR_WS_INCLUDES . 'end_cache.php'); ?> を追記。 以上。 はまだ start_cache.php ----------------------------------------------- <?php // キャッシュの設定 $settings_cachedir = '/var/www/cache/'; $settings_cachetime = 3600; // キャッシュの有効時間 3600秒(1時間) $thispage = 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF']; $cachelink = $settings_cachedir . md5($thispage) . '.html'; if (@file_exists($cachelink)) { $cachelink_time = @filemtime($cachelink); if ((time() - $settings_cachetime) < $cachelink_time && !tep_session_is_registered('customer_id')) { @readfile($cachelink); die(); } } ob_start(); ?> end_cache.php ----------------------------------------------- <?php $fp = fopen($cachelink, 'w'); @fwrite($fp, ob_get_contents()); @fclose($fp); ob_end_flush(); ?>