概要
Fess のマルチテナンシー機能を使用すると、単一の Fess インスタンスで 複数のテナント(組織、部門、顧客など)を分離して運用できます。
仮想ホスト機能を使用することで、各テナントに対して:
独立した検索UI
分離されたコンテンツ
カスタマイズされたデザイン
を提供できます。
仮想ホスト機能
仮想ホストは、HTTPリクエストのホスト名に基づいて、異なる検索環境を提供する機能です。
仕組み
ユーザーが
tenant1.example.comにアクセスFess がホスト名を識別
対応する仮想ホスト設定を適用
テナント固有のコンテンツとUIを表示
仮想ホストヘッダーの設定
仮想ホスト機能を有効にするには、 virtual.host.headers プロパティを設定します。 このプロパティは fess_config.properties で定義します。
設定形式
各行に ヘッダー名:ヘッダー値=仮想ホストキー の形式で指定します:
# fess_config.properties
virtual.host.headers=Host:tenant1.example.com=tenant1\n\
Host:tenant2.example.com=tenant2
複数の仮想ホストを設定する場合は、改行区切りで記述します。
仮想ホストキーの制約
仮想ホストキーには以下の制約があります:
使用可能な文字は英数字とアンダースコア(
a-zA-Z0-9_)のみです。それ以外の文字は自動的に除去されます。以下のキー名は予約語のため使用できません:
admin、common、error、login、profile
管理画面での設定
クロール設定
Webクロール設定で仮想ホストを指定することで、コンテンツを分離できます:
管理画面にログイン
「クローラー」→「ウェブ」でクロール設定を作成
「仮想ホスト」フィールドで
virtual.host.headersで定義した仮想ホストキーを選択この設定でクロールされたコンテンツは、指定した仮想ホストでのみ検索可能
アクセス制御
仮想ホストとロールの組み合わせ
仮想ホストとロールベースのアクセス制御を組み合わせることで、 より細かいアクセス制御が可能です。
クロール設定で仮想ホストとパーミッションを組み合わせて設定します:
# クロール設定の仮想ホスト
tenant1
# クロール設定のパーミッション
{role}tenant1_user
ロールベース検索
詳細は ロールベース検索の設定 を参照してください。
UIカスタマイズ
各仮想ホストに対してUIをカスタマイズできます。
テーマの適用
仮想ホストごとに異なるテーマを適用:
「システム」→「デザイン」でテーマを設定
仮想ホスト設定でテーマを指定
カスタムCSS
仮想ホストごとにカスタムCSSを適用するには、管理画面の「システム」→「デザイン」でCSSファイルを編集します。仮想ホストキーに対応するビューディレクトリにカスタムテンプレートを配置することもできます。
ラベル設定
仮想ホストごとに表示するラベルを制限:
ラベルタイプの設定で仮想ホストを指定
指定した仮想ホストでのみラベルが表示される
API認証
仮想ホストごとにAPIアクセスを制御:
アクセストークン
仮想ホストに紐づくアクセストークンを発行:
「システム」→「アクセストークン」でトークンを作成
トークンに仮想ホストを関連付け
APIリクエスト
curl -H "Authorization: Bearer TENANT_TOKEN" \
"https://tenant1.example.com/api/v1/search?q=keyword"
DNS設定
マルチテナンシーを実現するためのDNS設定例:
同一サーバーへのサブドメイン
# DNS設定
tenant1.example.com A 192.168.1.100
tenant2.example.com A 192.168.1.100
# またはワイルドカード
*.example.com A 192.168.1.100
リバースプロキシ設定
Nginxを使用したリバースプロキシ設定例:
server {
server_name tenant1.example.com;
location / {
proxy_pass http://localhost:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
server {
server_name tenant2.example.com;
location / {
proxy_pass http://localhost:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
データ分離
完全なデータ分離が必要な場合は、以下のアプローチを検討:
インデックスレベルの分離
各テナントに対して別々の Fess インスタンスとインデックスを使用:
# テナント1用Fessインスタンス(fess_config.properties)
index.document.search.index=fess_tenant1.search
# テナント2用Fessインスタンス(fess_config.properties)
index.document.search.index=fess_tenant2.search
注釈
index.document.search.index はインスタンスごとに1つのみ設定可能です。 インデックスレベルの完全な分離を行うには、テナントごとに別々の Fess インスタンスを起動するか、 カスタム実装が必要です。通常のマルチテナンシーでは、仮想ホスト機能による論理的な分離で十分です。
ベストプラクティス
明確な命名規則: 仮想ホストとロールに一貫した命名規則を使用
テスト: 各テナントでの動作を十分にテスト
監視: テナントごとのリソース使用状況を監視
ドキュメント: テナント設定を文書化
制限事項
管理画面は全テナントで共有されます
システム設定は全テナントに影響します
一部の機能は仮想ホストに対応していない場合があります
参考情報
ロールベース検索の設定 - ロールベースのアクセス制御
仮想ホスト - 仮想ホスト設定の詳細
ページのデザイン - デザインカスタマイズ