HTML レスポンスを変換する必要がある Squid フォワードプロキシでは、適応パスを使用します。Squid はブラウザのプロキシリクエストを処理し、ICAP レスポンスサービスが本文の変換を実行して、適応された HTTP メッセージを返します。

これにより、変換はリクエストのライフサイクルの中で明確な位置を持ちます。レスポンスヘッダのルールは HTML パーサの代わりにはならず、別個の Web サーバフィルタは Squid を通過するトラフィックを自動的には処理しません。

レスポンスサービスを接続する

ICAP サポートを備えた Squid 7 ビルドと既存の互換サービスがある場合、設定の形は次のとおりです。

acl adaptation_clients src 192.0.2.0/24

icap_enable on
icap_service html_editor respmod_precache bypass=0 icap://127.0.0.1:1344/modify

adaptation_access html_editor allow adaptation_clients
adaptation_access html_editor deny all

クライアント範囲とサービス URI は例です。URI はレスポンス変換を実装する実際の ICAP サービスを指す必要があり、/modify を宣言してもサービスは作成されません。この断片はプロキシの既存のリスナとアクセス制御を補完します。

respmod_precache はキャッシュ前の時点でのレスポンス適応を選択します。adaptation_access はそのサービスのトランザクションを選択します。bypass=0 設定は、該当するトランザクションがサービス障害に遭遇したときに Squid がこのサービスを黙って飛ばせないことを意味します。変換が必須かどうかに応じて、その障害時の動作を選んでください。

適応ディレクティブはバージョン固有です。特に、これらの設定リファレンスは Squid 7 および以前のサポート対象ライン向けの ICAP サービスと適応アクセスのインタフェースを列挙し、Squid 8 では利用不可としています。この断片は Squid 7 の例として扱い、任意のリリースにコピーしないでください。

サービスに正確な変換契約を与える

どのレスポンスが対象で、どの変更が必要かを指定します。HTML のみの変換では、画像、アーカイブ、無関係なメディアはそのままにします。サービスは実際に受け取る表現も扱う必要があります。圧縮された本文、文字エンコーディング、変更後の本文を記述するメタデータです。任意のレスポンスバイトにテキストを挿入することは、一般的な HTML 変換ではありません。

置換がユーザー固有の場合はキャッシュを検討してください。結果の表現が 1 人の読者にしか有効でない場合、キャッシュ前の変換と共有キャッシュの組み合わせは不適切です。キャッシュ可能性と変換ポリシーを整合させ、該当する no-transform ディレクティブを尊重してください。

最後に、通常の HTTPS CONNECT トンネルは暗号化されたバイトを運びます。HTML をレスポンスアダプタに公開することはありません。意図的に管理された TLS 検査の仕組みは、復号されたレスポンスがこの経路に入る前に、独自の互換設定とクライアントの信頼を必要とします。ICAP ルールだけではその可視性は追加されません。

関連記事