どのようにapachedev.ruを保存しましたか

私はapache2の内部専用のサイト(ここ数年見ていませんでした)に行くことにしました。 しかし、私はサイトが一時的にブロックされたというホスティング事業者からのメッセージだけを見ました。 Yandexでリクエストを行いました。検索エンジンには既にキャッシュに何もありません。 このサイトは長い間ブロックされていると思います。 SMSの助けを借りて、ホスティングを1日間延長しましたが、2007年12月以降は更新がありませんでした。 ドメインの連絡先で指定されたメールで著者に連絡しようとしました。 返事が来ませんでした...







保存されたサイトが幸運だったことに注意してください。 シンプルで論理的です。 記事、写真のコピーは長く退屈なプロセスです。 すべてを一度にコピーすることにしました。 私たちは何を持っています:







データストアとして、次のいずれかを選択しました。



ファイルをそのまま保存します 。つまり、 ページのソースアドレスが/topic/123.htmlの場合、トピックディレクトリを作成し、そこにファイルを配置します。 たとえば、wgetはこれを行います。 しかし、私はこのアプローチが好きではありませんでした。



URIからmd5ハッシュを作成し、多くのファイルをdata / TUTHESH.dbファイルに保存します。 その後、このフォルダには何も見つかりません。 好きじゃなかった。



md5ハッシュを作成し、sqlite baseに保存します。 基本的に、これは以前のバージョンと同じですが、ファイルは1つだけです。 mysqlに保存するための別のオプションが検討されました-しかし、それはすでに痛くてモバイルではなく、かさばっていません。 そしてsqlite:いくつかのファイルを新しい場所に書き直しました-サイトはデプロイされて準備ができています。



ModRewrite-私は新しいものを発明しませんでした:



RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule . /index.php

# :

RewriteCond %{HTTP_HOST} !^apache2dev\.ru$

RewriteRule ^ apache2dev.ru%{REQUEST_URI} [R=301,L]








仕組み-index.php



ソースコードはここにあります: apache2dev.ru/index.phps



1.ターゲットサイトのアドレスを追加する場合に備えて、$ _SERVER ['REQUEST_URI']を使用します。

2. md5ハッシュを取得する

3.ローカルキャッシュにリクエストされたページがあるかどうかを確認します

4.そうでない場合、サイトのソースをリクエストし、レスポンスヘッダーを解析します。 興味があるのは、「Content-Type」と「Last-Modified」の2つだけです

5.キャッシュヘッダーと応答。 HTMLファイルを少し処理した後、クライアントに結果を提供します。 基準Content-Type = text / html

6. 1日の有効期限を追加します。



私は、キャッシュにデータを元の形式で保存することに決めました。



データベースを作成します。

CREATE TABLE storage (loc TEXT PRIMARY KEY, heads TEXT, fdata TEXT, location TEXT);





これで、サイトを開いて写真のあるページを見たときに、最初のデータがローカルキャッシュに保存されました。



走る 'wget -r .ru'



'wget -r .ru'



と少し作業 'wget -r .ru'



。 -rスイッチを指定したwgetは、サイト全体を再帰的にダウンロードしようとします。 彼はそれをあまり上手くやっていない。 たとえば、彼はjavascriptが何であるかをまったく知りません。 今、私はサイトを開いて、wgetが逃したものをキャッチするためにページを調べます。



結論として、私は膝の上に別のスクリプトをスケッチしました。これは、現在ローカルデータベースにあるものを示しています。 リストをすばやく見て、数行を削除します。



ソース: apache2dev.ru/list.phps



私はサイトを動作モード、つまり 現在のロジックは次のとおりです。ローカルキャッシュにデータがない場合、ソースサイトに何も要求せず、単にエラー404を表示します



速度測定



abを使用して測定しました:70kbの画像と任意のhtmlページ。 違いは、追加のpreg_replaceのみです(広告の一部を削除し、絶対リンクを相対リンクに置き換え、このページがコピーであるという警告を挿入することを許可しました)



#ab -c 10 -n 1000 apache2dev.ru/images/ff_adds/validator.gif

1秒あたりのリクエスト:417.32 [#/ sec](平均)



#ab -c 10 -n 1000 apache2dev.ru/2006/01/28/ustanovka-apache-20-2

1秒あたりのリクエスト:29.66 [#/秒](平均)



結果は私にとても合っています。



このアプローチの長所と短所:





可能な改善:





ところで、問題のapacheに関するサイト: apache2dev.ru

フルセット: apache2dev.ru/catcher.tgz



All Articles