Squid のリクエストを親プロキシへ送る
Squid 6.13で指定クライアントの転送リクエストに親プロキシを使わせ、意図しない直接接続へのフォールバックを防ぎます。
Squidで親プロキシを宣言しても、それだけですべての転送リクエストに使用が必須となるわけではありません。直接接続が方針に反するなら、その要件を明示的に設定し、親が使えないときの挙動も試してください。
Squid 6.13向けのこの例は親を一つ指定し、一つのクライアント接続元についてオリジンへの直接転送を禁止します。
cache_peer 192.0.2.20 parent 3128 0 no-query default name=upstream
acl routed_client src 198.51.100.27/32
never_direct allow routed_client
二つのアドレスはいずれも仮の値です。公開HTTP親プロキシが許可されている管理下の上流テストでは、HTTPプロキシリストからアドレスを選べます。意図したクライアントだけを許可する独立した http_access 方針は残してください。ルーティング規則はクライアントにプロキシ利用権を与えません。
既存のルーティング規則を確認する
no-query はこのピアへのICP問い合わせを無効にします。ゼロはピアの問い合わせポートであり、HTTPリスナーではありません。クライアント向けリスナーとそのアクセス規則は別です。
この部分を追加する前に、既存の always_direct 設定やほかのピア選択を確認します。always_direct で一致を拒否するだけでは、親の使用を必須にはできません。明示的なnever-direct規則が、選んだクライアントにその要件を指定します。
対象となるのは転送を必要とするトランザクションです。使えるローカルキャッシュがあれば親に接続せずに応答できるため、新しい親接続がないからといって自動的に経路違反になるわけではありません。
経路と障害時の挙動を確認する
管理下の宛先を使い、宛先側の観測と併せてアクセスログの階層情報を調べます。最終HTTPステータスだけでは、Squidが親を使ったのか、直接接続したのかは分かりません。
メンテナンステストで親を利用できなくし、同じ未キャッシュのリクエストを繰り返します。直接転送が禁止なら、別経路でオリジンに届くのではなく、トランザクションが失敗するはずです。自分が管理するサービスでだけ行い、終わったら意図した設定に戻してください。