Nginx は、コンテンツとアプリケーションの配信を高速化するために使用できるオープンソースの高性能 Web サーバーです。 Nginx は、セキュリティを強化し、スケーラビリティを向上させ、高可用性ロード バランサーとしても使用できます。リバース プロキシとして使用でき、Nginx の最も重要な用途の 1 つはコンテンツ キャッシングです。最良のアプローチの 1 つは、Nginx をコンテンツ キャッシングとして使用することです。この記事では、Web サイトのパフォーマンスを向上させるための Nginx FastCGI コンテンツ キャッシングについて説明します。
Nginx で FastCGI キャッシングを有効にする
この記事では、Linux マシンに Nginx と PHP が既にインストールされていることを前提としています。
FastCGI キャッシングの有効化を開始するには、キャッシングを有効にする仮想ホスト構成ファイルを編集します。
$ cd /etc/nginx/conf.d
$ vi example.conf
ファイルの先頭に次の内容を追加します。行は server {} ディレクティブ の外にある必要があることに注意してください .
fastcgi_cache_path /etc/nginx/cache levels=1:2 keys_zone=MYAPP:100m inactive=60m; fastcgi_cache_key "$scheme$request_method$host$request_uri";
どこで、
- fastcgi_cache_path – キャッシュの場所
- レベル – キャッシュの階層レベル。/etc/nginx/cache の下に 2 レベルのディレクトリ階層を設定します
- keys_zone – メモリ ゾーン名 (この例では MYAPP を使用しました。お好みで設定できます)
- 非アクティブ – 指定された時間内にアクセスされなかったキャッシュ データがキャッシュから削除されるまでの時間を指定します。この例では、非アクティブ時間は 60 分に設定されていますが、これは増減できます。
- fastcgi_cache_key – キャッシュ ファイル名のハッシュ方法を指定します
factcgi_cache_key で使用される変数
- $scheme – リクエスト スキーム HTTPS または HTTP
- $request_method – GET や POST などのリクエスト メソッドを指定します
- $host – リクエストに一致するサーバーの名前
- $request_uri – 完全なリクエスト URI
キャッシュ ファイルの場所は、ハードディスクのどこでもかまいませんが、「メモリを割り当てられません」という問題を回避するために、サイズはシステムの RAM + スワップよりも小さくする必要があります。
次に、PHP リクエストが php-fpm に渡される location ディレクティブに移動します。 「location ~ \.php$ {}」内に次の行を追加します
fastcgi_cache MYAPP;
fastcgi_cache_valid 200 1m;
MYAPP はメモリ ゾーン名で、fastcgi_cache_valid 200 はすべての HTTP 200 応答をキャッシュします。
時間のみが定義されている場合、200、301、および 302 の応答がキャッシュされます。
次のコマンドを実行して、Nginx vhost 構成をテストします。
$ nginx -t
Nginx サービスを再起動します。
$ systemctl restart nginx
完全な vhost 構成ファイルは次のようになります
fastcgi_cache_path /etc/nginx/cache levels=1:2 keys_zone=MYAPP:100m inactive=60m; fastcgi_cache_key "$scheme$request_method$host$request_uri"; server { listen 80; root /usr/share/nginx/html; index index.php index.html index.htm; server_name your_server_name; location / { try_files $uri $uri/ /index.html; } location ~ \.php$ { try_files $uri =404; fastcgi_pass unix:unix:/run/php/php8.0-fpm.sock; fastcgi_index index.php; include fastcgi_params; fastcgi_cache MYAPP; fastcgi_cache_valid 200 60m; } }
FastCGI キャッシングのテスト
ドキュメントのルート ディレクトリに単純な PHP ファイルを作成します。
$ vi /usr/share/nginx/html/info.php
以下の内容を貼り付けて保存
<?php phpinfo(); ?>
curl コマンドまたはブラウザを使用してファイルをリクエストします
キャッシュが正常に機能する場合は、/etc/nginx/cache の下にキャッシュ ディレクトリを一覧表示できます
server{} ディレクティブの上に次の行を追加して、キャッシュが失われたかヒットしたかを示します
add_header X-Cache $upstream_cache_status;
Nginx を再起動し、curl コマンドを次のように実行します
$ curl -I http://localhost/info.php
Nginx fastCGI キャッシュでのキャッシュ例外の設定
基本認証ページなどの動的コンテンツをキャッシュする必要がない場合もあります。これらのタイプのコンテンツは、「$request_method」、「$request_uri」、「$http_cookie」などのさまざまな変数に基づいてキャッシュされないようにすることができます。
以下はキャッシュ例外の設定例で、サーバー内で使用する必要があります。{}
#Cache everything by default set $no_cache 0; #Don't cache POST requests if ($request_method = POST) { set $no_cache 1; } #Don't cache if the URL contains a query string if ($query_string != "") { set $no_cache 1; } #Don't cache the following URLs if ($request_uri ~* "/(cp/)") { set $no_cache 1; } #Don't cache if there is a cookie called PHPSESSID if ($http_cookie = "PHPSESSID") { set $no_cache 1; }
結論
この記事では、動的コンテンツ キャッシュ用に PHP で Nginx を構成する方法を学びました。また、キャッシュの例外を設定するためのさまざまなヒントについても学びました。