タイトルは、突っ込みが入ったら変えます。
Nginxにリバースプロキシを設定する。
fastcgi cacheで。
リバースプロキシとfastcgi cacheについては、Nginxのfastcgi cacheってリバースプロキシ?を参照。
Nginxの基本設定とPHP-FPMが動く設定とWordPress用の設定はやってあること前提です。
1. nginx.confの設定
設定ファイルを開く。
sudo vim /etc/nginx/nginx.conf
変更後がこちら。
追加するディレクティブは1つだけ。
user nginx;
user nginx;
worker_processes 2;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
server_tokens off;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush off;
keepalive_timeout 65;
gzip on;
gzip_http_version 1.0;
gzip_disable "msie6";
gzip_proxied any;
gzip_min_length 1024;
gzip_comp_level 6;
gzip_types text/plain text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript application/json;
# FastCGIキャッシュ用
fastcgi_cache_path /var/cache/nginx/runble1.com levels=1:2 keys_zone=cache_runble1.com:15m inactive=7d max_size=1000m;
include /etc/nginx/conf.d/*.conf;
}
追加している部分を抜粋。
追加したディレクティブは1つだけだけど、パラメータが多いなー・・・
fastcgi_cache_path /var/cache/nginx/runble1.com levels=1:2 keys_zone=cache_runble1.com:15m inactive=7d max_size=1000m;
1つ目のパラメータは、キャッシュを保存するパスを指定。
保存場所は/var/runがいいとの情報もある。
/var/cache/nginx/runble1.com
2つ目は、キャッシュパス配下のディレクトリの文字数を指定。
levels=1:2は1階層目は1文字、2階層目は2文字でサブディレクトリが作成されることを意味する。
levels=1:2
3つ目は、キャッシュパスのゾーン名とゾーンサイズを指定。
ゾーン名がcache_runble1.com。ゾーンサイズが15mでゾーンに15MBが消費される。
keys_zone=cache_runble1.com:15m
inactiveで指定した期間を過ぎるとキャッシュが削除される。
7dは7日間アクセスがなかったら削除されるということ。
inactive=7d
ゾーン内のキャッシュ全てを合わせたサイズを指定。
1000MB(1GB)と指定してある。それを超えたら止まる(キャッシュされなくなる?)。
max_size=1000m
2. default.confの設定
default.confを開く。
sudo vim /etc/nginx/conf.d/default.conf
変更後がこちら。
server {
listen 80 default_server;
server_name runble1.com www.runble1.com;
if ($http_host = www.runble1.com) {
rewrite (.*) http://runble1.com$1;
}
root /var/www/wp;
index index.php;
access_log /var/log/nginx/runble1_access.log main;
error_log /var/log/nginx/runble1_error.log warn;
#error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
# WordPress用のリダイレクト設定
try_files $uri $uri/ /index.php?q=$uri&$args;
# WordPress用アクセスログ設定
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;
}
# fastcgi cacheのフラグ
set $do_not_cache 0;
# fastcgi cacheの判定</pre>
<pre> # POST中の場合
if ($request_method != "GET") {
set $do_not_cache 1;
}
# WordPressにログイン中、コメント中、記事作成中
if ($http_cookie ~ ^.*(comment_author_|wordpress_logged_in|wp-postpass_).*$) {
set $do_not_cache 1;
}
# モバイル系の場合
if ($http_x_wap_profile ~ ^[a-z0-9\"]+) {
set $do_not_cache 1;
}
# -- Mobile ?
if ($http_profile ~ ^[a-z0-9\"]+) {
set $do_not_cache 1;
}
# -- Kei-tai ?
if ($http_user_agent ~ ^.*(2.0\ MMP|240x320|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;
}
# -- Mobile ?
if ($http_user_agent ~ ^(w3c\ |w3c-|acs-|alav|alca|amoi|audi|avan|benq|bird|blac|blaz|brew|cell|cldc|cmd-|dang|doco|eric|hipt|htc_|inno|ipaq|ipod|jigs|kddi|keji|leno|lg-c|lg-d|lg-g|lge-|lg/u|maui|maxo|midp|mits|mmef|mobi|mot-|moto|mwbp|nec-|newt|noki|palm|pana|pant|phil|play|port|prox|qwap|sage|sams|sany|sch-|sec-|send|seri|sgh-|shar|sie-|siem|smal|smar|sony|sph-|symb|t-mo|teli|tim-|tosh|tsm-|upg1|upsi|vk-v|voda|wap-|wapa|wapi|wapp|wapr|webc|winw|winw|xda\ |xda-).*) {
set $do_not_cache 1;
}
# -- Kei-tai ?
if ($http_user_agent ~ ^(DoCoMo/|J-PHONE/|J-EMULATOR/|Vodafone/|MOT(EMULATOR)?-|SoftBank/|[VS]emulator/|KDDI-|UP\.Browser/|emobile/|Huawei/|IAC/|Nokia|mixi-mobile-converter/)) {
set $do_not_cache 1;
}
# -- Kei-tai ?
if ($http_user_agent ~ (DDIPOCKET\;|WILLCOM\;|Opera\ Mini|Opera\ Mobi|PalmOS|Windows\ CE\;|PDA\;\ SL-|PlayStation\ Portable\;|SONY/COM|Nitro|Nintendo)) {
set $do_not_cache 1;
}
# 拡張子がphpの場合
location ~ \.php$ {
# fastcgi(php-fpmの設定)
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
# fastcgi cacheの設定
fastcgi_cache cache_runble1.com;
fastcgi_cache_key "$scheme://$host$request_uri";
fastcgi_cache_valid 200 10m;
fastcgi_cache_valid 404 1m;
fastcgi_no_cache $do_not_cache;
fastcgi_cache_bypass $do_not_cache;
#
include fastcgi_params;
}
}
default.confに追加したディレクティブは多い。
上から見ていこう。
キャッシュ用フラグのセット。
キャッシュを使う場合は0のまま、使わない場合は1にする。
# fastcgi cacheのフラグ set $do_not_cache 0;
以下の3つの場合は、キャッシュしない。
・POST中
・WordPressにログイン中、コメント中、記事作成中
・携帯及びモバイルからアクセス
# fastcgi cacheの判定
# POST中はキャッシュしない
if ($request_method != "POST") {
set $do_not_cache 1;
}
# WordPressにログイン中、コメント中、記事作成中はキャッシュしない
if ($http_cookie ~ ^.*(comment_author_|wordpress_logged_in|wp-postpass_).*$) {
set $do_not_cache 1;
}
# モバイル系
if ($http_x_wap_profile ~ ^[a-z0-9\"]+) {
set $do_not_cache 1;
}
以下略
fastcgi cacheの設定部分が以下。
自分はlocation ~ \.php$ { }内に入れているけど、serverディレクティブ内に記述している人もいる。
# fastcgi cacheの設定 fastcgi_cache cache_runble1.com; fastcgi_cache_key "$scheme://$host$request_uri"; fastcgi_cache_valid 200 10m; fastcgi_cache_valid 404 1m; fastcgi_no_cache $do_not_cache; fastcgi_cache_bypass $do_not_cache;
この部分のディレクティブは1つずつ見ていこう。
キャッシュのゾーンを指定。
httpディレクティブで指定したゾーン名を指定する。
fastcgi_cache cache_runble1.com;
キャッシュするときのキー情報を指定。
キー情報はキャッシュを取ってくる(識別する)ための情報。
fastcgi_cache_key "$scheme://$host$request_uri";
HTTPステータスごとにキャッシュ時間を指定。
200の時は20分、404のときは1分キャッシュする。
fastcgi_cache_valid 200 10m; fastcgi_cache_valid 404 1m;
キャッシュする場合としない場合の判定。
$do_not_cacheが0の時キャッシュする、0でなければキャッシュしない。
fastcgi_no_cache $do_not_cache;
キャッシュで応答するかどうかの場合の判定。
$do_not_cacheが0の時はキャッシュを返す、0でなければキャッシュで応答しない。
fastcgi_cache_bypass $do_not_cache;
参考
Nginxを使ったもう一歩進んだWordPressチューニング | cloudrop
Nginx のFastCGIキャッシュ(fastcgi cache )を使ってみた | レンタルサーバー・自宅サーバー設定・構築のヒント

コメント