share facebook facebook2 twitter menu hatena pocket slack

2015.02.25 WED

非常に安易なnginx reverse proxyの作り方

齋藤 康征

WRITTEN BY齋藤 康征

こんにちは、cloudpack齋藤(saitara) です。

今回はCentOSを前提としていますが、多くのUN*X系システムにおいて同様の方法で実現できるはずです。

環境の準備

tmpfsを準備する

/etc/fstab に以下のエントリーを追加し、OSで使用できるうちの20%のメモリを tmpfs として確保します。ディスクへの読み書きを減らし、速度向上・環境によるストレージ利用制限を回避を実現します。

tmpfs  /var/cache/nginx    tmpfs   defaults,noatime,mode=1777,size=20%      0 0

nginxの準備

導入方法の確認

nginx公式ページにて導入方法を確認します。
Installing nginx

今回はCentOSですので、更にLinux系のページヘ進みます。
nginx: Linux packages

リポジトリの追加

リポジトリを /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 として追加します。

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;
    }
}

元記事はこちらです。
非常に安易なnginx reverse proxyの作り方

齋藤 康征

齋藤 康征

cloudpackの @saitara (齋藤 康征)です。 大きなトラフィックと大量のアクセスを好物としてます。