Nginx · 1 min read · Jan 22, 2026

なぜ常にNginxをマイクロキャッシングと一緒に使用すべきなのか

なぜ常にNginxをマイクロキャッシングと一緒に使用すべきなのか

誰もがウェブサーバーからできるだけ多くのものを引き出すのがどれほど難しいかを知っています。ホスティングエンジニアとしての私の日常業務では、同じ質問をかなり頻繁に受けます。「わあ、クールなウェブサイトですが、大量のトラフィックに耐えられますか?」。

「通常の」状況

Apacheのmod_phpで動作している「通常の」ウェブサイトは、簡単に1秒あたり20リクエストを処理できるはずですが、もし1秒あたり50リクエストが来たらどうしますか(政治団体などのウェブサイトでは珍しくありません)?私の意見では、Apacheをやめるべきです。今のままではApacheはもはや通用しません。

YES! Nginx!

Nginxが登場します!あなたがすることは、Nginx上にウェブサイトを設定し、クイックロードテスト(例えば、200の同時ユーザーで1000リクエスト)を実行することです。そして、Apacheよりも多くは得られないことがわかりますが、なぜでしょうか?それは非常に簡単です。Nginxにはphpモジュールが組み込まれていないため、phpページを処理するためにfastcgiプロセッサが必要です(私はphp-fpmを使用することをお勧めします。これはspawn-cgiよりも優れています)。では、今何を使うべきかと聞かれたら?マイクロキャッシングを使用してください!

マイクロキャッシングとは何ですか?

マイクロキャッシングとは何でしょうか?理論的には、ファイルなどを短時間(例えば1秒)キャッシュすることです。これは、ユーザーがページをリクエストすると、それをキャッシュし、次のリクエストはキャッシュから取得されることを意味します。そして、5秒以内に100人のユーザーがリクエストを行うと、20人に1人だけがフルページを構築する必要があります(Nginxと良く構造化されたサイトでは、これは問題ありません)。

信じられない!

信じた方がいいですよ!例を挙げましょう。今あなたがいるこのウェブサイトを考えてみてください。1000リクエスト、200の同時ユーザーのロードテストを行ったとしましょう。このウェブサイトをApacheで実行すると、1秒あたり10〜40リクエストの間になります、最大で!そして、あなたのウェブサーバーはかなりの負荷にさらされ、環境を拡張せざるを得なくなります。Nginxでphp-fpmを使用してマイクロキャッシングなしで実行しても同じことです(リクエストが少し増えるかもしれませんが、リクエストを処理するために多くのphp-fpmプロセスが実行されます)。マイクロキャッシングを使用すると、なんと1秒あたり300〜450リクエストを得ることができます!

さあ、教えて!

マイクロキャッシングは実際には簡単に設定できます。以下は、PHPで作成された任意のウェブサイトに対して実行できる例の設定です(この場合、Wordpressに特化しています)。見てみましょう:

#
# あなたのウェブサイト
#
server {
    listen       80;
    server_name  ;
    access_log    main;
    error_log ;
    root   ;
    location / {
        index  index.php index.html index.htm;
    }
    if (!-e $request_filename) {
        rewrite ^(.+)$ /index.php?q=$1 last;
    }
    location ~ \.php$ {
        # 変数のデフォルトを設定
        set $no_cache "";
        # GET/HEAD以外の場合、キャッシュせず、クッキーで1秒間ユーザーをキャッシュ不可としてマーク
        if ($request_method !~ ^(GET|HEAD)$) {
            set $no_cache "1";
        }
        # 必要に応じてキャッシュなしクッキーを削除
        # (何らかの理由で、add_headerは前のifブロックに含まれていると失敗します)
        if ($no_cache = "1") {
            add_header Set-Cookie "_mcnc=1; Max-Age=2; Path=/";
            add_header X-Microcachable "0";
        }
        # no-cacheクッキーが設定されている場合、キャッシュをバイパス
        if ($http_cookie ~* "_mcnc") {
                    set $no_cache "1";
        }
        # フラグが設定されている場合、キャッシュをバイパス
        fastcgi_no_cache $no_cache;
        fastcgi_cache_bypass $no_cache;
        fastcgi_cache microcache;
        fastcgi_cache_key $server_name|$request_uri;
        fastcgi_cache_valid 404 30m;
        fastcgi_cache_valid 200 10s;
        fastcgi_max_temp_file_size 1M;
        fastcgi_cache_use_stale updating;
        fastcgi_pass localhost:9000;
        fastcgi_pass_header Set-Cookie;
        fastcgi_pass_header Cookie;
        fastcgi_ignore_headers Cache-Control Expires Set-Cookie;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_param  PATH_INFO          $fastcgi_path_info;
        fastcgi_param  PATH_TRANSLATED    $document_root$fastcgi_path_info;
        #fastcgi_intercept_errors on;
        include fastcgi_params;
    }
}

nginx.confにキャッシュフォーマットとキャッシュゾーンも追加する必要があります。http {}ブロックにこれらの行を追加してください:

fastcgi_cache_path /var/cache/nginx2 levels=1:2 keys_zone=microcache:5m max_size=1000m;
log_format cache '$remote_addr - $remote_user [$time_local] "$request" '
'$status $upstream_cache_status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';

試してみて!

私は皆さんに自分で試してみて、パフォーマンスの向上を実感してほしいと思います!ApacheからNginxに移行するのは大きな切り替えですが(設定面で)、すぐに慣れることができます!

http://livebyt.esをチェックして、今後の新しい記事を楽しみにしてください!

Share: X/Twitter LinkedIn

新しい投稿を受信箱で受け取る

スパムはありません。いつでも購読を解除できます。