せでぃのブログ

ブログ初心者おいどんのどうでもいい愚痴やどうでもいい愚痴やどうでもいいマメ知識などを披露するチラシの裏です。

Squidをリバースプロキシとして入れてFessにIPv6のドメイン名でアクセスしてみた

Squidをリバースプロキシとして使ってみた | レンタルサーバー・自宅サーバー設定・構築のヒント
 この辺を見ながら、Fessにドメイン名でアクセスできるようにしてみた。
f:id:Sediment:20140820064605p:plain



 どうせならIPv6化しちまえってことで、少しだけ変則的な書き方になりました。
 今回の構成は、まずSquidが名前解決できているドメイン名の80番ポートでクライアントのアクセスを受けて、自サーバ内にあるFessのループバックアドレス8080番ポートに転送するって構成になってます。なので、ip6tablesの穴は8080から80番に変えました。
 更に簡潔に言うと、ReverseProxyでポート変換、DNSで名前変換したってとこでしょうか。
f:id:Sediment:20140820143926p:plain
 今回の設定では、クライアントの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が別サーバでも簡単に構成変えられそうでしょ?


Squidyumからインストール。v3.1.10。
Fessは9.2.0。

それでもまだ/fess/が邪魔だ!

おいどんはあんま気にならないけど、やるならバーチャルホストあたりかね。
Tomcatのバーチャルホストでサブドメイン。Apache連携無しで実現する方法。
Fessの既存のサイトは全部/fess/から始まるリンクでできてるから、結構面倒くさそうだよ?
CMONOS.JP | 開発者ブログ | 全文検索サーバー Fess を試す


参考)
CentOS6.5 32bit版にfess-server-9.2.0をインストールした手順 - せでぃのブログ