こうこく
作 ▸

Squidでリクエストヘッダの値を見て親プロキシに振り分ける

req_header で振り分けます。

Amazon LinuxSquid 3.5.20

browser でも referer でも mime-type でもないヘッダの値を見たいので、req_header を使います。

squid : acl configuration directive
acl aclname req_header header-name [-i] any\.regex\.here
  # regex match against any of the known request headers.  May be
  # thought of as a superset of "browser", "referer" and "mime-type"
  # ACL [fast]

このページの例は以下のような感じです。

  • 親プロキシは my.parent.proxy のポート9999とします。
  • リクエストヘッダに X-Hogehoge が入っており、値が piyo なら my.parent.proxy に転送します。
  • それ以外のリクエストはこのプロキシでアクセスします。

また、この例では固定値ですが、req_header は正規表現で指定できます。-i オプションをつけると大文字小文字を問わなくなるらしいです。

squid.conf
# このプロキシは全てのアクセスを受け付ける
http_access allow all

# cache_peerとして親プロキシ (飛ばし先プロキシ) 定義
cache_peer my.parent.proxy parent 9999 0 no-query

# rule1定義 = 「リクエストヘッダの X-Hogehoge の値が piyo (大文字小文字問わず) なら」
acl rule1 req_header X-Hogehoge -i piyo

# rule1にマッチするなら my.parent.proxy を使う
cache_peer_access my.parent.proxy allow rule1

# rule1にマッチするならcache_peerを必ず使う
never_direct allow rule1

# rule1にマッチしないならcache_peerは使わない
always_direct allow !rule1

# このプロキシはポート8080で待ち受ける
http_port 8080

もっと簡潔に書ける方法が分かったら修正します。

参考にさせていただいた記事

水銀室 特定ドメインだけ別のSquidへプロキシルーティングを設定する -CentOS最短構築支援-

Squidでアクセス先ごとに複数親プロキシを使い分ける - P-SQUARE MIDI Site

この記事に何かあればこちらまで (非公開)