GNU/Linux >> Linux の 問題 >  >> Linux

Nginx と PHP でサーバー側の FastCGI キャッシングを有効にする方法

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 を構成する方法を学びました。また、キャッシュの例外を設定するためのさまざまなヒントについても学びました。


Linux
  1. CentOS8でNginxを使用してVarnishCache6をインストールおよびセットアップする方法

  2. PHP-FPMを介してPHPで動作するようにNginxを構成する方法

  3. NGINXでHTTP2を有効にする方法

  1. CentOSに代替PHPキャッシュ(APC)をインストールして有効にする方法

  2. Ubuntu20.04にNginxを使用してPHP7.4をインストールする方法

  3. Ubuntu 22.04 に NVM と Nginx を使用して Node.js をインストールする方法

  1. CentOS8にNginxとPHP7.3でNextcloudをインストールする方法

  2. Ubuntu 16.04にNginx、PHP-FPM、SSLを使用してDrupal8.1をインストールする方法

  3. Apache と PHP でメモリ リークを調査するにはどうすればよいですか?