2015.03.26
waka 開発

nginxで作る簡単キャッシュサーバー構築

こんにちは。wakaです。久しぶりに技術ネタ。
最少構成でwebサイト(apache・php・mysqlで作った何か)の大手ニュースサイトで取り上げられたり、
テレビで紹介されたり、普通に順調にアクセス数が伸びたりでサーバーがいっぱいいっぱいに
なったときに解決する方法ってなんでしょう?

Webサーバー増やしてロードバランサー入れる?DBの参照系分ける?
などあると思いますが、もちろんコストも手間も結構かかってきちゃいます。

ってことでコストあまりかけずにスピーディに解決する方法としてキャッシュサーバー
を導入しようという選択肢をとる場合があります。

キャッシュサーバーといってもその中でさらに選択肢は色々あるのですが、今回は強力なキャッシュ能力を
もったnginxでキャッシュサーバーを立てる方法を公開します。

ちなみにnginxについてはこちらを参照ください

nginx.org

■環境:CentOS6.5、WordPressでサイト公開しているサイトのキャッシュサーバー、管理者ページをキャッシュ対象外にする

まずは、nginxの導入から

[root@localhost ]# yum install -y nginx

以上、終了。
linux最少構成でインストールしてyumでインストールするだけです。
(yumで見つからない方は上記のnginx.orgでrpmダウンロードしてインストールしてください)

あとはコンフィグの設定
必要な項目を追加していきます。

[root@localhost ]# vi /etc/nginx/nginx.conf

~ 省略 ~
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"';

  access_log /var/log/nginx/access.log main;

  sendfile on;
  #tcp_nopush on;

  keepalive_timeout 65;

  #gzip on;

  include /etc/nginx/conf.d/*.conf;
  ##ここから下を追加
  ##キャッシュする場所、キャッシュスペースのサイズ、キャッシュで用いるキーの名前など
  proxy_cache_path /home/nginx/cache levels=1:2 keys_zone=cache-space:4m max_size=51200m inactive=
  1440m;

  server {
    listen 80;
    server_name hogehoge.jp; ##公開するURL

    #キャッシュ設定
    proxy_cache cache-space;
    proxy_cache_valid 200 302 304 10m; #応答コードが200/302/304だったら10分キャッシュ
    proxy_cache_valid 404 1m; #応答コードが404だったら1分キャッシュ
    proxy_ignore_headers X-Accel-Redirect X-Accel-Expires Cache-Control Expires Set-Cookie; #な
    にがなんでもキャッシュ
    send_timeout 300;
    proxy_connect_timeout 300;
    proxy_send_timeout 300;
    proxy_read_timeout 300;
    proxy_temp_path /home/nginx/tmp;

    location /
      {
      set $not_cache 0;
      #WordPressの管理画面などはキャッシュしない
      if ($request_uri ~ "^/wp-admin/.*"){
        set $not_cache 1;
      }
      if ($request_uri ~ "^/preview/.*"){
        set $not_cache 1;
      }
      proxy_no_cache $not_cache;
      proxy_cache_bypass $not_cache;
      proxy_pass https://fumfum.jp; #キャッシュ元URL
    }
  }
}

最後、キャッシュ用のディレクトリを作成し起動して終了

[root@localhost ]# mkdir -p /home/nginx/cache
[root@localhost ]# mkdir -p /home/nginx/tmp
[root@localhost ]# chown nginx:nginx /home/nginx/cache
[root@localhost ]# chown nginx:nginx /home/nginx/tmp
[root@localhost ]# service nginx start

これでキャッシュサーバーの完成、hogehoge.jpにアクセスするとfumfum.jpをキャッシュして返してくれます。
設定によっては画像ファイルだけキャッシュ、一部のページだけキャッシュなど書き方自由で、本体側のwebサーバーには
変更が必要ないので導入リスクも低いです。
複数台用意してDNSラウンドロビンで簡単に負荷分散なんかすると、かなりコスト効率のよい負荷分散構成になります。

もし、導入したいなどあれば以下から問い合わせください。

お問い合わせ

以上。

waka

一覧に戻る