Squidをリバースプロキシとして使ってみた | レンタルサーバー・自宅サーバー設定・構築のヒント
この辺を見ながら、Fessにドメイン名でアクセスできるようにしてみた。
どうせならIPv6化しちまえってことで、少しだけ変則的な書き方になりました。
今回の構成は、まずSquidが名前解決できているドメイン名の80番ポートでクライアントのアクセスを受けて、自サーバ内にあるFessのループバックアドレス8080番ポートに転送するって構成になってます。なので、ip6tablesの穴は8080から80番に変えました。
更に簡潔に言うと、ReverseProxyでポート変換、DNSで名前変換したってとこでしょうか。
今回の設定では、クライアントのDNS設定をBINDに向けたくらいで、その他のクライアント設定及びFess側の設定は一切いじってません。
Squid設定
Squid自体の設定作業は主に3つ。インストール、squid.conf編集、cache_dir作成。手間はほとんどない。
cache_dir作成はこちら。リバースプロキシではないけど、cache_dirやらcache_memなどの使い方がのってた。
Squidによるプロキシサーバーの構築
cache_dirのストアタイプについて
squid : cache_dir configuration directive
configureで--enable-storeioオプションを設定しておく必要がありますが、ストレージタイプを変えてみても面白いと思う。ufs,aufs,diskd,rock,cossというタイプがあるらしい。cossは不安定なのでsquid3.x系では削除されてるって書いてあるね。cossに代わりrockが3.2からサポートされ始めた模様。
linuxはaufs、BSDはdiskdがいいという掲示板の書き込みが目立ちます。負荷が高い場合は、rockを推奨してますが、パフォーマンスを全く気にしないのであればufsでいいようです。
http://www.ipcops.com/phpbb3/viewtopic.php?f=17&t=2535
==== The ufs store type ====
"ufs" is the old well-known Squid storage format that has always been there.
「ufs」は常にあった古くからよく知られているSquidのストレージフォーマットです。
Usage:
cache_dir ufs Directory-Name Mbytes L1 L2 [options]
==== The aufs store type ===="aufs" uses the same storage format as "ufs", utilizing POSIX-threads to avoid blocking the main Squid process on disk-I/O. This was formerly known in Squid as async-io.
「aufs」はディスクI / OのメインのSquidプロセスを妨げないよう、POSIXスレッドを利用し、「ufsファイル」と同じストレージフォーマットを使用しています。これは、以前は非同期IOとしてSquidで知られていた。
Usage:
cache_dir aufs Directory-Name Mbytes L1 L2 [options]
==== The diskd store type ===="diskd" uses the same storage format as "ufs", utilizing a separate process to avoid blocking the main Squid process on disk-I/O.
「diskd」は、ディスクI / OのメインのSquidプロセスをブロックしないように別のプロセスを利用して、「ufsファイル」と同じ記憶フォーマットを使用しています。Usage:
cache_dir diskd Directory-Name Mbytes L1 L2 [options] [Q1=n] [Q2=n]
==== The rock store type ====
The Rock Store type is a database-style storage. All cached entries are stored in a "database" file, using fixed-size slots, one entry per slot. The database size is specified in MB. The slot size is specified in bytes using the max-size option. See below for more info on the max-size option.
ロックストア·タイプは、データベース形式のストレージである。すべてのキャッシュされたエントリは、固定サイズのスロットごとに1つのエントリを使用して、「データベース」ファイルに保存されます。データベースのサイズはMB単位で指定します。スロットサイズは、最大サイズのオプションを使用してバイト単位で指定します。最大サイズのオプションの詳細は下記を参照してください。
If possible, Squid using Rock Store creates a dedicated kid process called "disker" to avoid blocking Squid worker(s) on disk I/O. One disker kid is created for each rock cache_dir. Diskers are created only when Squid, running in daemon mode, has support for the IpcIo disk I/O module.
可能であれば、Squidはロックストアを使用して、ディスクI / OのSquidワーカーを妨げないよう「disker」と呼ばれる専用の子プロセスを作成します。diskerという子プロセスが1つ、rockタイプのcache_dirごとに作成されます。 Diskersは、デーモンモードで実行中のSquidが、ipcioディスクI / Oモジュールをサポートしている場合にのみ作成されます。Usage:
cache_dir rock Directory-Name Mbytes[options]
==== The coss store type ====
NP: COSS filesystem in Squid-3 has been deemed too unstable for production use and has thus been removed from this release. We hope that it can be made usable again soon.
Squid-3のCOSSファイルシステムは、製品向けには不安定すぎると判断されましたので、今回のリリースから削除されました。私たちは、再びすぐに使用可能になることを願っています。
squid.conf
sampleiptables/squid.conf at master · csny/sampleiptables · GitHub
conf全体はgithubに上げた。要点のみ解説。
accelはリバースプロキシモードのことらしいので、必須。ignore-ccはリクエストの Cache-Control ヘッダを無視する。defaultsiteのところは、Fess内のページの相対リンクのベースになるところなので、見せたい名前且つSquidサーバとアクセスするクライアントの両方が(DNSまたはそれぞれのhosts経由で)知っている名前を入れればおk。うちはSquidとFessとBINDがルームシェアしてるのでBINDで名前解決してるAAAAレコードのCNAMEにしました。後述。
お次は、転送先の設定。ほかにproxy仲間はいないのでparentで。parent以外には、sibilingとかmulticastとかがあるらしい。また、転送先はSquidデーモンではないので、ICPキャッシュは無効。
IPv6だとacl等の許可リストにもアドレスが必要なので注意。
IPv4であれば参考サイトさんの通りにやればいいのかなーと。
# 公開するサーバのIPアドレス、ポート番号を指定します。 # 192.168.1.100:80 : SquidサーバのIPアドレスとポート番号を指定します。ポート番号だけでも問題ない。 # accel : アクセラレータ / リバースプロキシ モード とします。 # ignore-cc : キャッシュコントロール情報を無視します。 # defaultsite : デフォルトサイト名を指定します。ブラウザのURL窓に出す表示。IPアドレスかFQDN。 # Squid normally listens to port 3128 http_port 80 accel ignore-cc defaultsite=www.orenchi.local # 他のproxyサーバまたは親(web)サーバを定義します。 # 127.0.0.1 : 他のサーバのIPアドレス(ここではwebサーバ本体)を指定します。 # parent : サーバタイプを指定します。ここでは、親(web)サーバとして定義します。ほかにはsibiling,multicastがある。 # 8080 : サーバのポート番号を指定します。 # 0 : サーバのicpポート番号を指定します。icpポート番号は、キャッシュ情報のやりとりに使用されます。0は無効です。 # no-query : このサーバにICP照会を無効にします。 # originserver : このサーバは、オリジナルサーバ(ここではwebサーバのこと)へのアクセスに使用されます。proxyじゃないという意味。 cache_peer ::1 parent 8080 0 no-query originserver
BIND
zoneファイルはこれだけ。v6の逆引き? そんなんやってられっかw
centos IN A IPv4アドレス
www IN CNAME centos.orenchi.local.
centos IN AAAA IPv6アドレス
今回導入したリバースプロキシだけでも、URL入力窓から:8080が消せますが、DNSが面倒くさければ、テスト環境でアクセス台数が少ないという前提ですが、PCとSquidの/etc/hosts内で解決するだけでもドメイン名でのアクセスに変えられます。
squid.confの要点は2カ所だけなので、SquidとFessが別サーバでも簡単に構成変えられそうでしょ?
それでもまだ/fess/が邪魔だ!
おいどんはあんま気にならないけど、やるならバーチャルホストあたりかね。
Tomcatのバーチャルホストでサブドメイン。Apache連携無しで実現する方法。
Fessの既存のサイトは全部/fess/から始まるリンクでできてるから、結構面倒くさそうだよ?
CMONOS.JP | 開発者ブログ | 全文検索サーバー Fess を試す