TSAPI

Introduction to the Apache Traffic Server API.

概要

#include <ts/ts.h>
#include <ts/remap.h>

解説

Apache Traffic Server API は C 言語を使ってインストール済みの Traffic Server の振る舞いをカスタマイズするプラグインの作成を可能にします。

Traffic Server は洗練されたキャッシュと DNS や HTTP のリクエストやレスポンスのような Web 関連トラフィックの処理を可能とします。Traffic Server 自体は次のように簡素化されたイベントドリブンループから成っています。

for (;;) {
    event = get_next_event();
    handle_event (event);
}

Traffic Server が動作を開始するときに読み込まれる共有ライブラリを作るためにプラグインのソースをコンパイルします。プラグインは特定の Traffic Server イベントに登録されるコールバック関数を含んでいます。Traffic Server がイベントの処理を必要とすると、そのイベントタイプに登録したあらゆるコールバック関数が呼び出されます。

プラグインは次の使い方ができます。

  • HTTP processing plugins can filter, denylist, authorize users or transform content.

  • プロトコルプラグインは Traffic Server が新しいプロトコルコンテンツをプロキシーキャッシュできるようにします。

  • A denylisting plugin denies attempts to access web sites that are off-limits.

  • 追加変換プラグインは HTTP レスポンスコンテンツにデータを追加します。

  • 画像変換プラグインは JPEG 画像を GIF 画像に変換します。

  • 圧縮プラグインはデータを圧縮する圧縮サーバーにレスポンスデータを送信します (もしくは、Traffic Server のホストマシンにある圧縮ライブラリが圧縮を行うかもしれません) 。

  • 認証プラグインは特定の Web サイトにアクセスするためのユーザーの権限を確認します。このプラグインはローカルの認証プログラムに問い合わせたり、認証サーバーに問い合わせを送信したりするかもしれません。

  • リクエストヘッダーからクライアントの情報を収集しその情報をデータベースに入力するプラグイン。

  • プロトコルプラグインは指定されたポートへの特定のプロトコルのリクエストを受け、クライアントのリクエストに応えるために Traffic Server のプロキシーサーバーとキャッシュを使用します。

Naming Conventions

Traffic Server API は次の命名規則に従います。

  • TS プレフィックスは Traffic Server API のすべての関数と変数の名前に使用されます。例えば、TS_EVENT_NONETSMutexTSContCreate() となります。

  • 列挙された値は常にすべて大文字で書かれます。例えば、TS_EVENT_NONETS_VC_CLOSE_ABORT となります。

  • 定数はすべて大文字です。列挙された値は定数の一部に見えるかもしれません。例えば、TS_URL_SCHEME_FILETS_MIME_FIELD_ACCEPT となります。

  • 定義された型の名前は大文字小文字が混在します。例えば、TSHttpSsnTSHttpTxn()TSDebug() となります。

  • 関数名は混在になります。例えば、TSUrlCreate()TSContDestroy() となります。

  • 関数名は次の 主語-動詞 命名スタイルを使用します。TS-<主語>-<動詞> 、<主語> の部分は一般的なものから限定的なものにしていきます。これはその名前を読むことで関数が何をするのかを分かりやすくします。例えば、URL (一般的な主語) からパスワードフィールド (限定的な主語) を取得する関数は TSUrlPasswordGet() となります。

  • Create 、Destroy 、Get 、Set 、Copy 、Find 、Retrieve 、Insert 、Remove 、Delete のような一般的な動詞はそれが適切な場合にのみ使用されます。

Plugin Loading and Configuration

Traffic Server が最初にスタートするとき、読み込まれる必要のあるすべての共有ライブラリの名前を決定するために plugin.config ファイルを参照します。 plugin.config ファイルは個々のプラグインの初期化関数 TSPluginInit() に渡される引数も定義します。records.config ファイルは個々のプラグイン共有ライブラリのパスを定義します。

以下の plugin.config ファイルのサンプルはコメント行、空行、二つのプラグインの設定から成っています。

# This is a comment line.
my-plugin.so www.junk.com www.trash.com www.garbage.com
some-plugin.so arg1 arg2 $proxy.config.http.cache.on

plugin.config ファイル内の個々のプラグインの設定は UNIX または DOS のシェルコマンドに似ています。plugin.config 内の各行は 1023 文字を超えることはできません。

最初のプラグインの設定は my-plugin.so と名付けられたプラグインのためのものです。これはそのプラグインの初期化ルーチンに渡される三つの引数を含んでいます。二番目の設定は some-plugin.so と名付けられたプラグインのためのものです。これは三つの引数を含んでいます。その最後の引数である $proxy.config.http.cache.on は実は設定変数です。Traffic Server は指定された設定変数を参照し、その値で置き換えます。

プラグインは plugin.config ファイルに出てくる順番で Traffic Server に読み込まれ初期化されます。

Plugin Initialization

各プラグインはプラグインが読み込まれたときに Traffic Server が呼び出す TSPluginInit() という初期化関数を定義していなければなりません。TSPluginInit() は一般的に設定情報を読み込みイベント通知のフックを登録するために使用されます。

ファイル

plugin.config, records.config

参照

TSPluginInit(3ts)