squidをいじる
squid(プロキシサーバ)ここ何日かいじっていました。
squidは自宅でも使っているのですが、それは自宅サーバのサイトはプロキシを経由しないと自宅で見ることができないためで、
サービスをデフォルトで起動している程度の設定に過ぎません。
いじってみると、実に事細かいことができることが分かりました。
今回squid.confで行ったのは、
・上位プロキシの指定(cache_peer ….parent)
・ローカルネットなど特定のURLやある文字を含むページはキャッシュしない(acl QUERY urlpath_regex)
バックスラッシュでエスケープした方がいいのかな?
・SSLとして使えるポートを追加する(acl SSL_ports port)
・場合によっては全くキャッシュしない
・ローカルネットや特定のURLは親サーバへ送らずにダイレクトに接続(always_direct)
(例)
acl domain-example dstdomain example.jp
・
・
always_direct allow domain-example
・squidのログをapache形式にする(emulate_httpd_log on)
・Webalizerでapache形式にしたsquidのログを読み込ませる(新たにsquid用のsquid_webalizer.confを作成し、confの中でLogTypeをclfにしたものをcronで実行させる)
・ネットワーク内の自動検出設定であるwpad.datに複数のプロキシを記述することで、最初のプロキシが落ちても次のプロキシを自動で読みに行く
(例)
・example.co.jp宛のアクセスは直接
・192.168.1ネットワーク宛のアクセスは直接
・192.168.2宛のプロキシは192.168.2.2ポート3128のプロキシを使い、
192.168.2.2がだめなときは192.168.2.3を使用する
それ以外は、192.168.3.2ポート3128のプロキシを使い、192.168.3.2が
だめな時は192.168.3.3を使用する。これはブラウザによってはmyipaddressの値が
ループバックアドレスであったり、ipv6だったりしてうまく取得できない場合があります。
その場合はelse以下の設定が使用されます。
function FindProxyForURL(url, host) {
if(shExpMatch(host,"example.co.jp")) return “DIRECT";
if(isInNet(host, “192.168.1.0","255.255.255.0″)) return “DIRECT";
if(myIpAddress().substring(0, 9) == “192.168.2")
return “PROXY 192.168.2.2:3128; PROXY 192.168.2.3:3128; DIRECT";
else
return “PROXY 192.168.3.2:3128; PROXY 192.168.3.3:3128; DIRECT";
}
・プロキシの存在を隠す
header_access X-Forwarded-For deny all
header_access Via deny all
header_access Cache-Control deny all
などなど
なかなかよいプロキシが作れました。