タイトルは、突っ込みが入ったら変えます。
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 )を使ってみた | レンタルサーバー・自宅サーバー設定・構築のヒント
コメント