今回はCentOSを前提としていますが、多くのUN*X系システムにおいて同様の方法で実現できるはずです。
環境の準備
tmpfsを準備する
/etc/fstab に以下のエントリーを追加し、OSで使用できるうちの20%のメモリをtmpfsとして確保します。
ディスクへの読み書きを減らし、速度向上・環境によるストレージ利用制限を回避を実現します。
tmpfs /var/cache/nginx tmpfs defaults,noatime,mode=1777,size=20% 0 0
nginxの準備
導入方法の確認
nginx公式ページにて導入方法を確認します。
http://nginx.org/en/docs/install.html
今回はCentOSですので、更にLinux系のページヘ進みます。
http://nginx.org/en/linux_packages.html
リポジトリの追加
リポジトリを /etc/yum.repos.d/nginx として追加し、yumで取り扱える状態とします。
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=0
enabled=1
リポジトリを利用してインストール
取り扱える状態になったらyumでインストールします。
# yum update
# yum install nginx -y
reverse proxy設定の追加
以下のような設定を /etc/nginx/conf.d/reverseproxy.conf として追加します。
- TCP8080でlistenしているWebサーバがいる
- 指定したファイル形式以外はキャッシュせずスルーで流す(HTMLなどが動的な場合こうしておくと安全です)
- http://localhost/invalidate_cached_url/%なんとか% でinvalidationしたい
proxy_cache_path /var/cache/nginx/static_file_cache levels=1:2 keys_zone=cache_static_file:128m inactive=7d max_size=512m;
proxy_temp_path /var/cache/nginx/temp;
upstream backend {
server 127.0.0.1:8080;
}
server {
listen 80;
server_name _;
location / {
proxy_redirect off;
set $do_not_cache 0;
if ($request_method != GET) {
set $do_not_cache 1;
}
if ($uri !~* ".(jpg|png|gif|jpeg|css|js|swf|pdf)$") {
set $do_not_cache 1;
}
proxy_no_cache $do_not_cache;
proxy_cache_bypass $do_not_cache;
proxy_cache cache_static_file;
proxy_cache_key $scheme$host$uri$is_args$args;
proxy_cache_valid 200 5m;
proxy_cache_valid any 1m;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://backend;
}
location ^~ /invalidate_cached_url/ {
allow 127.0.0.1;
deny all;
proxy_cache_purge nginx_cache $arg_url;
}
}