前回「Nginx をリバースプロキシ(キャッシュ) として使ってみた」では、
nginxをリバースプロキシサーバーとして使ってみました。
このリバースプロキシサーバーは、キャッシュ機能を持っていますが、そのキャッシュを削除する機能を持っていません。
つまり、キャッシュを削除したい場合は、
- 時間経過による自動削除を待つか、
- キャッシュディレクトリの配下の全ファイルを丸ごと削除してしまうか、
など、いろいろな方法があります。(詳しくは、nginx でリバースプロキシ、FastCGIキャッシュのキャッシュを削除する方法をまとめて解説してみた を参照してください。)
nginxのキャッシュを削除するには、1つのやり方としてnginx cache purge というnginxのモジュールを追加することで各ページごとにキャッシュを削除できるようになります。
nginxの場合、モジュールを組み込むには、rpmのビルド(再構築)を行う必要があります。
nginx cache purge モジュールをnginxに組み込むためのrpmのビルド(再構築)する方法は、
を参照してください。
ここでは、既に組み込まれているいるnginxを利用しているものとして、以降、記述します。
nginx cache purgeモジュールの設定を行う
ここでは、
前回「Nginx をリバースプロキシ(キャッシュ) として使ってみた」で編集、作成したnginx.confを、再編集してみましょう。
この色の箇所が、nginx cache purgeモジュールのための編集箇所になります。
/etc/nginx/nginx.confの設定例
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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
| user apache apache;
worker_processes 2;
error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;
worker_rlimit_nofile 1024;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for" "$gzip_ratio"';
access_log /var/log/httpd/access.log main;
sendfile on;
tcp_nopush off;
keepalive_timeout 0;
gzip on;
gzip_http_version 1.0;
gzip_types text/plain
text/html
text/xml
text/css
application/xml
application/xhtml+xml
application/rss+xml
application/atom_xml
application/javascript
application/x-javascript
application/x-httpd-php;
gzip_disable "MSIE [1-6]\.";
gzip_disable "Mozilla/4";
gzip_comp_level 2;
gzip_vary on;
gzip_proxied any;
gzip_buffers 4 8k;
server_names_hash_bucket_size 128;
proxy_buffering on;
proxy_buffer_size 8k;
proxy_buffers 100 8k;
proxy_cache_path /var/cache/nginx/domain1.com levels=1:2 keys_zone=cache_domain1.com:15m inactive=7d max_size=1000m;
proxy_temp_path /var/cache/nginx/temp 1 2;
proxy_connect_timeout 60;
proxy_read_timeout 90;
proxy_send_timeout 60;
proxy_cache_valid 200 2h;
proxy_cache_valid 302 2h;
proxy_cache_valid 301 4h;
proxy_cache_valid any 1m;
proxy_set_header Host $http_host;
proxy_set_header X-Remote-Addr $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
upstream www.domain1.com.backend {
ip_hash;
server 127.0.0.1:8080;
}
server {
listen 80;
server_name domain1.com www.domain1.com;
access_log /var/log/httpd/domain1.com.access.log;
error_log /var/log/httpd/domain1.com.error.log;
if ($http_host = domain1.com) {
rewrite (.*) http://www.domain1.com$1;
}
location ~ /wp-admin/ {
access_log off;
proxy_pass http://$host.backend;
}
location ~ /wp-includes/ {
access_log off;
proxy_pass http://$host.backend;
}
location ~ /wp-cron.php {
access_log off;
proxy_pass http://$host.backend;
}
location ~ /wp-comments/ {
access_log off;
proxy_pass http://$host.backend;
}
location ~ /wp-login.php {
access_log off;
proxy_pass http://$host.backend;
}
location ~ /wp-content/ {
access_log off;
proxy_pass http://$host.backend;
}
location / {
set $do_not_cache 0;
if ($http_cookie ~* "comment_author_|wordpress_(?!test_cookie)|wp-postpass_" ) {
set $do_not_cache 1;
}
if ($http_user_agent ~* “2.0\ 2MMP|240×320|400X240|AvantGo|BlackBerry|Blazer|Cellphone|Danger|DoCoMo|Elaine/3.0|EudoraWeb|Googlebot-Mobile|hiptop|IEMobile|KYOCERA/WX310K|LG/U990|MIDP-2.|MMEF20|MOT-V|NetFront|Newt|Nintendo\ Wii|Nitro|Nokia|Opera\ Mini|Palm|PlayStation\ Portable|portalmmm|Proxinet|ProxiNet|SHARP-TQ-GX10|SHG-i900|Small|SonyEricsson|Symbian\ OS|SymbianOS|TS21i-10|UP.Browser|UP.Link|webOS|Windows\ CE|WinWAP|YahooSeeker/M1A1-R2D2|iPhone|iPod|Android|BlackBerry9530|LG-TU915\ Obigo|LGE\ VX|webOS|Nokia5800″) {
set $do_not_cache 1;
}
proxy_no_cache $do_not_cache;
proxy_cache_bypass $do_not_cache;
proxy_pass http://$host.backend;
proxy_cache_key $scheme://$host$request_uri
proxy_cache cache_domain1.com;
}
location ~ /purge(/.*) {
allow 127.0.0.1;
allow 111.111.111.111;
deny all;
proxy_cache_purge cache_domain1.com "$scheme://$host$1";
}
}
server {
listen 8080;
server_name domain1.com www.domain1.com;
index index.php index.html index.htm;
root /var/www/html;
if ($http_host = domain1.com) {
rewrite (.*) http://www.domain1.com$1;
}
try_files $uri $uri/ /index.php?q=$uri&$args;
location ~* \.(gif|jpg|png|ico|css|js)$ {
access_log off;
}
location ~ /wp-admin {
access_log off;
include php_exec;
}
location ~ /wp-content {
access_log off;
include php_exec;
}
location ~ /wp-includes {
access_log off;
include php_exec;
}
location ~ /wp-cron.php {
access_log off;
include php_exec;
}
location ~ /wp-login.php {
access_log off;
include php_exec;
}
location ~ /wp-comments {
access_log off;
include php_exec;
}
include php_exec;
}
}
|
proxy_cache_purge cache_domain1.com “$scheme://$host$1”;
削除したいキャッシュ情報のゾーン名、キー情報を指定します。
ここでは、
ゾーン名 : cache_domain1.com ( キャッシュのゾーン名をそのまま指定します )
キー情報 : $scheme://$host$1 ( $1は、http://www.domain1.com/purge
/xxxx purge以降の文字列を指します。 )
つまり、
http://www.domain1.com/aaa.html というキャッシュされたアドレスがあるとします。
このキャッシュを削除したい場合は、
http://www.domain1.com/purge/aaa.html と指定します。
このアドレスをウェブブラウザなどからアクセスすれば、キャッシュを削除することができます。
ウェブブラウザでアクセスしてみてください。削除できたら以下のような画面が表示されます。
allowで、あなたのPCのIPアドレスは登録しておきましょう。
ここでは、http://www.domain1.com/purgeへアクセスできるのは、
127.0.0.1
111.111.111.111
この2つのIPアドレスからアクセスのみ許可されています。自分がアクセスするためのPCのIPアドレスぐらいは、設定していないと確認できません。
これで、Wordpressなどでも更新したとき、キャッシュの削除を行うことができますね。
このような手段がないと、ディレクトリを全部削除しないといけないなど、ちょっと、効率が悪かったりします。
rpmの再構築だけが、ちょっと面倒かもしれませんが、これも慣れです。
一度やってもると後はスイスイいけます。
nginxのリバースプロキシのキャッシュをページごとに削除したい方は、一度お試されると良いと思います。
ここでは、
さくらのVPS を使用しています。
さくらのVPSのお申し込みは、
こちら からどうぞ。
ご利用のブラウザは、広告ブロック(AdBlockなど) が適用となっていませんか?
このサイトでは、コンテンツの一部が非表示、あるいは、コメント、お問い合わせの投稿ができない、検索ができないことがあります。
関連記事 :
2012年2月4日, 4:38 PM
[…] […]