Webサーバーとの結合テスト

LightFileコマンドは多くの場合、Webに公開された画像の軽量化を行います。画像が期待通りに軽量化され、その画像が正常にWeb配信まで行われているか、各画像について結合テストを行うことができます。

この機能はバッチ処理の安全性が向上しますが、その分、各画像の処理時間が長くなり、単位時間あたりの処理数は低下します。

例えば、/var/www/html/imagesディレクトリ内の画像を対象に軽量化を行う場合に、そのディレクトリに対応するURLがhttps://example.com/imagesだった場合、次のようにコマンドを実行します。

$ lightfile \
  --serial <付与されたシリアルコード> \
  --file-system local \
  --dir /var/www/html \
  --http-verify-url https://example.com/images

問題発生時の通知について

もし画像のデータサイズが軽量化して上書き保存した画像データと一致しない場合、上書きアップロード処理の問題により画像データが破損した可能性があります。その場合は重大なエラーとしてプログラムの実行をその場で中断します。

重大なエラーが発生した場合、LightFileコマンド » 重大エラーの通知によって管理者が通知を受け取ることができます。早期発見に役立ててください。

オプション

次のオプションにより動作をカスタマイズできます。

  • --http-verify-wait デフォルトではアップロード完了から1秒間の待ち時間を置いた後にWebサーバーに対する結合テストを実行します。このオプションでその待ち時間を変更できます。例: --http-verify-wait 100ms
  • --http-verify-retry 検証に失敗した場合、デフォルトでは3回までリトライを行います。リトライの回数を変更できます。例: --http-verify-retry 5
  • --http-verify-no-busting Webサーバーに対する結合テストでは、キャッシュを避けるためのランダムなクエリ文字列が付与されます。そのランダムなクエリ文字列を付けず、ファイル名のみで検証を行います。

簡易的にファイルサイズを検証するには

Webサーバー経由ではなく、ファイルシステム上の属性によって軽量化の結果を検証する方法もあります。詳しくは、LightFileコマンド » ファイル破損の厳密な検査をご覧ください。

Webサーバー経由の結合テストはオプション --remote-verify-size と併用もできますが、通常はどちらか一方で十分です。

検証方法について

Webサーバーに対する結合テストでは、LightFileコマンドは次の手順でファイルサイズを検証します。

  1. 軽量化した画像に対応する画像URLを生成し、ランダムなクエリ文字列を付与します。
  2. 画像URLに対してHEADリクエストを送信し、レスポンスヘッダに含まれるConetnt-Lengthの値を取得します。
  3. レスポンスヘッダにContent-Lengthが含まれない場合は、画像URLに対してGETリクエストを送信し、ダウンロードされたデータサイズを取得します。
  4. 軽量化して上書きアップロードしようとしたデータサイズと比較し、一致した場合は合格とします。

Webサーバーに対する結合テストが正しく実施できないケース

ファイルの変更が直ちにWebサーバー経由の配信に反映されない境では、このWebサーバーに対する結合テスト機能は利用できません。

例えば次のようなケースが考えられます。

CDN経由で配信しているケース

画像をCDN経由で配信しているWebサイトでは、Webサーバー上のファイルを変更してから実際に配信される画像に反映されるまで時間を要する場合があります。

LightFileコマンドではこのキャッシュを避けるため、ランダムなクエリ文字列を付与して結合テストを行いますが、CDNによってはクエリ文字列を考慮しない設定となっている場合があります。

このケースでは、--http-verify-urlにオリジンサーバーのURLを指定することで結合テストを実施できる可能性があります。

ロードバランサーで負荷分散をしているケース

ロードバランサーを介して複数のWebサーバーで負荷分散をしている環境では、軽量化した画像がWebサーバーのリクエストに合致しない場合があります。

この場合もロードバランサーに関連付けられた個別のWebサーバーに直接アクセスできるURLがあれば、それを指定することで結合テストを実装できる可能があります。