レンタルサーバー・自宅サーバー設定・構築のヒント
レンタルサーバー・自宅サーバー設定・構築のヒント - レンタルサーバー・自宅サーバーの設定・構築情報を公開しています。

C5 C6 S6

Squid でキャッシュを削除する方法をまとめて解説してみた

2013年4月24日 2014年1月10日
squid cache remove

Squidをリバースプロキシとして使ってみた では、Squidによるリバースプロキシの設定について書きました。
そこでは、キャッシュされたファイルの削除については触れませんでした。

今回は、Squid でキャッシュを削除する方法について、簡単に解説してみたいと思います。

Squid のキャッシュ制御は、Apacheの htcacheclean (詳細は、Apache でディスクキャッシュを削除する方法をまとめて解説してみた を参照)と同じような動作をします。
nginxと動作とは異なり、Apacheのそれと同じように、有効期限を過ぎてもキャッシュファイルは削除されません。 キャッシュされたURLがアクセスされてキャッシュファイルの更新が実行されます。(古いキャッシュファイルは削除され、新しいキャッシュファイルが作成されます。)

また、これもApache同様、上記のようなキャッシュの更新以外にも、シェルからrm コマンドで キャッシュファイル、あるいはキャッシュディレクトリを直接削除することはできます。

そこで、今回は、Squid で作成されたキャッシュファイルの削除方法にについてまとめてみます。

Squid でキャッシュを削除する方法(まとめ)

先のとおりキャッシュを削除する方法は、いろいろあります。それぞれについて簡単に解説してみます。

時間経過による無効を待つ

これは、削除ではなく、時間の経過によってキャッシュが無効になるだけで、使われないだけです。例えば、Squid のキャッシュ設定(squid.conf)が以下のような設定となっていた場合、

...
# Squid のキャッシュ設定
refresh_pattern -i \.(html|htm|css|js)$ 1440 40% 40320
...

refresh_patternは、キャッシュの更新を定義するものです。
( 形式 : refresh_pattern [-i] regex min percent max [options] )

上記の設定の意味は、

拡張子が、.html .htm .css .js ( -iが付いているので大文字小文字を区別しません ) の場合、
最小キャッシュ時間が、1,440分=24時間=1日
最大キャッシュ時間が、40,320分=672時間=28日=約1か月

となります。

Squidは、要求されたURLのキャッシュ経過時間が、それぞれ以下のような条件で、それぞれの動作をします。

  • 最小キャッシュ時間 未満 :

    常にキャッシュをそのまま出力します。


  • 最大キャッシュ時間 以上 :

    最新へキャッシュを更新し、最新ページが出力されます。


  • 最小キャッシュ時間最大キャッシュ時間 :

    キャッシュの鮮度を以下の式から計算します。

    キャッシュ鮮度 = キャッシュサーバ上でのキャッシュ保存時間 ÷ ページ(あるいはファイル)の作成または変更からの経過時間

    キャッシュ鮮度が 40% を超えない場合は、キャッシュをそのまま出力します。
    キャッシュ鮮度が 40% を超えた場合は、最新へキャッシュを更新し、最新ページが出力されます。

    例えば、http://www.example.com/sample.html を考えてみます。
    sample.html は、ウェブサーバーへ 2013-4-1 1:0:0 に作成(最終更新)されたとします。
    その後、sample.html は、Squidにて 2013-4-2 5:0:0(作成されて 28時間=1,680分後) にキャッシュされたとします。
    次に、http://www.example.com/sample.html へアクセスがあったのが、2013-4-3 10:0:0(キャッシュされて 29時間=1,740分後) だったとします。
    その場合、キャッシュ鮮度は、以下のようになります。
    キャッシュ鮮度 = 1,740分 ÷ (1,680 + 1,740 = 5,160分) = 0.337… = 約34%

    この場合、40% を超えない場合は、キャッシュをそのまま出力します。


あくまでの明示的なExpires(有効期限)情報がない場合の制御になります。
ヘッダ情報に
Expires	Sat, 20 Apr 2013 01:35:12 GMT
とあれば、GMT時間で、2013-4-20 01:35:12 が有効期限になりますから、その時間を超えた場合は、キャッシュは更新されます。
それが、上記の最小キャッシュ時間を下回ったとしても、そちらが優先されます。

また、phpなどのスクリプトによる動的なページは、最終更新日がキャッシュされた日時となるでしょう。その場合、キャッシュ鮮度は、常に、100% になります。

上記の設定では、少なくとも 早くて1日、長くて約1か月後には、キャッシュが無効、あるいは更新されます。
(ヘッダ情報に明示的なExpires(有効期限)情報がある場合は、それに従います。)


キャッシュディレクトリの配下の全ファイルを丸ごと削除する

これは、非常に簡単なやり方で、例えば、Squidのキャッシュ設定(squid.conf)が以下のような設定となっていた場合、

...
cache_dir ufs /var/cache/squid 600 16 16
...

キャッシュディレクトリとして、/var/cache/squid を使用します。
このディレクトリを削除してしまえばよいわけです。
但し、Squidの場合、このディレクトリに swap.state という状態管理ファイルも同時に保存しています。
安全に削除するには、Squidを停止した上で、削除します。

# squidを停止します。
$ /etc/init.d/squid stop
squid を停止中: ................                           [  OK  ]

# squidのキャッシュディレクトリを全削除します。
$ rm -fR /var/cache/squid/*

# squidを起動します。
$ /etc/init.d/squid start
squid を起動中: .                                          [  OK  ]

これでキャッシュの完全なリフレッシュを行うことができます。
ただ、これは、サイト全体のキャッシュを削除してしまうのには、非常に便利ですが、例えば、1つのページのみが更新された場合などは、 サイト全体のキャッシュを削除する必要はないわけで、毎回、1つ、2つのページの更新のためにサイト全体のキャッシュを削除していては 無駄も多いですし、負荷もかかりやすくなってしまうというデメリットもあります。


squidclient で削除する

squidclient は、Squidの公式コマンドで、Squidの状態などを出力、管理することができます。その機能の中で、キャッシュの削除機能があります。

squidclientでキャッシュファイルを削除する場合は、以下のように使用します。

# squidclient  -p ポート番号 -m PURGE -h ホストIPアドレス 削除したいキャッシュのURL
$ squidclient -p 80 -m PURGE -h 192.168.1.100 http://www.example.com/

HTTP/1.0 200 OK
Server: squid/3.1.10
Mime-Version: 1.0
Date: Fri, 19 Apr 2013 20:58:17 GMT
Content-Length: 0
X-Cache: MISS from web.example.com
X-Cache-Lookup: NONE from web.example.com:80
Via: 1.0 web.example.com (squid/3.1.10)
Connection: close

該当するキャッシュファイルが存在し、削除できたら、
HTTP/1.0 200 OK が出力されます。

もし、該当ファイルが存在しない場合は、
HTTP/1.0 404 Not Found が出力されます。

squidclientでオプションの-m PURGEを使用するには、Squidの設定が必要になります。
Squidの設定ファイル(/etc/squid/squid.conf)で以下のように設定します。
...
# キャッシュ削除メソッドを定義します。
acl PURGE        method PURGE
#   アクセス元ローカルホストを定義します。
acl localhost    src   127.0.0.1/32 ::1
acl localnet     src   192.168.0.0/16
# キャッシュ削除メソッドへのアクセスは、localhostのみ可とします。
http_access allow PURGE localhost
http_access allow PURGE localnet
http_access deny  PURGE
...
上記のように設定しておくと、他のホストからの要求は一切拒否されるのでより安全です。
設定を終えたら、Squidの再読み込みを行って利用可能となります。
$ /etc/init.d/squid reload

squidclientを使って、ウェブページから削除する(おまけ)

毎回、コマンドをたたくのは大変なので、phpで作成したウェブページからsquidclientを起動して削除してみます。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
	<title>PURGE Cache for Squid.</title>
<style type="text/css">
table.panel {
	border: solid 1px #ccc; border-collapse: collapse;
	background-color:transparent;
}
table.panel th {
	background:#eee;
	border: solid 1px #ccc;
}
table.panel td {
	border: solid 1px #ccc;
	padding:5px;
}
div.output {
	margin:5px 0 5px 0;
	padding:5px;
	background-color:#ccc;
}
</style>
</head>
<body>
<h1>PURGE Cache for Squid.</h1>

<form action="" method="post">
<table class="panel">
<tr>
	<th>項目</th>
	<th>値</th>
</tr>
<?php
$squild_client = '/usr/bin/squidclient';
$server_ip     = '192.168.1.100';
$server_port   = '80';
$url = '';

$show_items = array (
	'squild_client' => array( 'squidclient の パス' , ''  ,true),
	'server_ip'     => array( 'サーバーIPアドレス'  , ''  ,true),
	'server_port'   => array( 'サーバーポート番号'  , ''  ,true),
	'url'           => array( '削除するURL'         , ''  ,true),
);

$all = 0;
foreach($show_items as $item_key => $item) {
	if(isset($_REQUEST[$item_key]) && !empty($_REQUEST[$item_key])){
		$show_items[$item_key][1] = $_REQUEST[$item_key];
		$$item_key = $_REQUEST[$item_key];
		$all++;
	} else {
		$show_items[$item_key][1] = $$item_key;
	}
}

foreach($show_items as $item_key => $item) {
	echo '<tr>'
		.'<th>'.$item[0].'</th>'
		.'<td>'.($item[2]? '<input type="text" name="'.$item_key.'" value="'.$item[1].'" />':$item[1]).'</td>'
		.'</tr>'."\n";
}

?>
</table>
<?php
if($all==count($show_items)){
	echo '<div class="output">結果<pre>';
	$cmd = $squild_client.' -p '.$server_port.' -m PURGE -h '.$server_ip.' '.$url ;
	echo '$ '.$cmd."\n";
	system($cmd );
	echo '</pre></div>';
}

?>
<p><input type="submit" name="submit" value="送信" /></p>
</form>


</body>
</html>

36-38行目あたりのデフォルト値は、各環境で編集すると使いやすくなると思います。

また、このphpファイルをキャッシュされないようにSquidの設定、ウェブサーバーの設定が必要となるかもしれません。
例えば、Squidの設定( /etc/squid/squid.conf )では、先のphpファイル名を purge.php とすれば、以下のように設定すると良いでしょう。

...
# (必要に応じて)キャッシュ不可の条件を定義します。
#   拡張子 .php をキャッシュ不可に定義します。
acl no_cache urlpath_regex .*\.php$
#   拡張子 .php + パラメータをキャッシュ不可に定義します。
acl no_cache urlpath_regex .*\.php\?.*
# no_cache で定義されたものは、すべてキャッシュしないようにします。
cache deny no_cache
...

キャッシュされずに正しく動作したら、以下のように出力され、キャッシュが削除されます。

Squid Purge


いかがだったでしょうか?
Squidのキャッシュ 削除は、squidclientで簡単にできて楽ですね。
Squid + Apacheの組み合わせが多いのも このようにキャッシュ制御が整っている点もあるのでしょうね。
Nginx との比較もいろんなサイトで行われていますので、Squidを導入する際は、色々と確認してから導入されると良いと思います。
ご利用のブラウザは、広告ブロック(AdBlockなど) が適用となっていませんか?
このサイトでは、コンテンツの一部が非表示、あるいは、コメント、お問い合わせの投稿ができない検索ができないことがあります。


関連記事 :

Apache でディスクキャッシュを削除する方法をまとめて解説してみた

Apache でキャッシュを削除する方法は、一応、公式なものは、htcachecleanを使っての削除のみです。 Apacheのキャッ ...

Squid + Apache でWordpressを使う時の注意点

ここまでに、Squid のリバースプロキス、キャッシュについて、記事を書いてきました。 Squidをリバースプロキシとして使ってみた ...

nginx でリバースプロキシ、FastCGIキャッシュのキャッシュを削除する方法をまとめて解説してみた

nginx でリバースプロキシのキャッシュを削除する方法は、一応、色々な方法があります。 Nginx をリバースプロキシ(キャッシュ) ...

Squidをリバースプロキシとして使ってみた

このサイトでは、リバースプロキシに関して、Nginxを使って実現する Nginx をリバースプロキシ(キャッシュ) として使ってみた という記事 ...

HTMLからXHTML1.0 or XHTML1.1への移行するためのポイント(相違点)

最近、Amazonや楽天の動向が注目されるように電子ブックの普及へ向かっていくことは必然の流れですね。 この流れから、HTMLからXHTMLへ ...



コメントを投稿 :

お名前 *

メールアドレス *
( メールアドレスが公開されることはありません。)

サイトアドレス

コメント *

* 印の項目は、入力が必要な項目です。




最近投稿の記事

[ 画像提供元 : Amazon ] 先日、1TBのディスクの入れ替え時にバックアップをとろうとディスクコピーを行いました。 その際 ...

Windows で Linux ファイルシステム Ext4 のディスクをマウントするには? Ext3Fsd が、おそらく、最も簡単なツール ...

今回は、Windows で Compass を使ってみました。 Compass とは、 Sass(サス、Syntactica ...

今回は、Anti Adblock を使ってみました。 Anti Adblock とは、 そもそも Adblock という ウェブ ...

デスクトップ環境でない サーバーで、Webページのキャプチャー画像をコマンドで撮る には、wkhtmltoimage, CutyCapt ...


さくらのVPS 全プラン リニューアルです。(石狩(北海道)も選択可)


root権限ありで ¥685 / 月 ~ と非常にリーズナブルな CPU 1(core)の 512 プランから、 最高 CPU 10(core), メモリ 32(GB), SSD容量 800(GB) までとプランが充実。
ディスクは、SSDとHDDの選択が可能になった他、データセンターは人気の東京、石狩(北海道)となりました。

また、どのプランでも好きなOSが選べます
( CentOS, Fedora, Scientific Linux, FreeBSD, Ubutu, Debian )

管理人もおすすめのVPSです。
試用期間がありますから、一度、お試しを!!

詳しくは、http://vps.sakura.ad.jp/さくらのVPSのサイトへ へどうぞ!!

カテゴリ


Serverman@VPS 完全1ヶ月無料 キャンペーン実施中です。


Serverman@VPS 完全1ヶ月無料 キャンペーン実施中です。
最近、スワップにも対応した Serverman@VPS は、かなりリーズナブルかもです。

  • メモリ1GB~2GBのEntryプラン :月額:490円
  • メモリ2MB~4GBのStandardプラン :月額:980円
  • メモリ4GB~8GBのProプラン :月額:1,980円

新規申し込みで1ヶ月間完全無料となるキャンペーンを実施中です。
Serverman@VPSの特徴は、安さとIPv6対応です。また、初期設定費0円もポイントです。

IPv6でちょっと遊んでみたい方には、おすすめかもしれませんね。最低利用期間もありませんから、気に入らないときは即解約もできます。

Serverman@VPSの詳細については、 http://dream.jp/vps/ Serverman@VPSのサイトへへどうぞ。



KVM採用 ConoHa VPSは、時間単位で借りれる便利なVPSです。


ConoHa VPS は、初期設定費0円最低利用期間無し時間単位で清算可能、 さらに、Web APIを使って自動化を図ることもできる便利なVPSです。

海外サーバー設置も可能で、ローカル接続にも対応と、かなり、機能豊富なサーバーです。

新規ユーザ登録で、クーポンもらえますから、まずは、お試しですね。

ConoHa VPSの詳細については、
http://www.conoha.jp/ へどうぞ。

KVM採用 お名前.com VPS(KVM) 2G プラン 初期設定費無料 キャンペーン 実施です。


メモリ2GBプラン CPU:3core、Disk:200GB
月額:1,153円から (初期設定:1,680円0円)

さくらのVPSがリニューアルされてもなんのその。
1GBメモリ / 2Core を ¥834 – の格安価格で提供中です!
間違いなくスペックからすると割安感ありです。
年間割引時の途中解約で返金がないのは、 ちょっと残念ですが、それでもこの割安感は魅力です。

まずは、お試しですね。

お名前.com VPS(KVM)の詳細については、
http://www.onamae-server.com/vps/ へどうぞ。(お試し期間が15日あります。)



  • ソーシャルブックマーク

  • はてなブックマークへ追加するはてな登録数
ページトップへ
Time : 0.2342 [s]