- 締切済み
Apacheでmod_rewriteを利用して複数ドメインを1個ですませる
Apacheでmod_rewriteを利用して複数ドメインを1個ですませる方法を探しています。 rewriteマスターはいませんか? 現在virtualhostが数百ありますが、再起動速度が遅いこと、メモリ消費量が多いことから、1個ですませたいと思ってします。 <virtualhost></virtualhost>内でrewriteを利用して1個ですませる設定を教えていただけないでしょうか。 mod_vhost_aliasを考えましたが、他の設定も入れたいのでmod_rewriteでどうにかできないかと思っています。 教えていただけないでしょうか。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- umasikajiro
- ベストアンサー率67% (545/803)
>でも期待する回答ではありませんでした。 まあ、でしょうね(笑) で、再起動時間の遅い点だけについて言えば 再起動ではなく 再読み込みを使えば 停止時間はほとんど無いと思います 1. /etc/init.d/httpd <=に起動スクリプトが有る場合(RPMで入れるとそう なるはず) # /etc/init.d/httpd reload 2. 自分でコンパイルした場合(/usr/local/apachee2/bin/httpd の場合) # /usr/local/apachee2/bin/httpd -k graceful ### で実用的か否かは別として rewriteで、やるとしたらですが 個人的な結論としては以下のようになります 条件1. 複数のホスト名(以下では仮に10個とする) 条件2. ドキュメントルートDIR以下に、それぞれのHOST用のサブディレクトリを 作り、アクセスした人から見て、あたかもバーチャルホストのドキュメント ルートのように見せる ##失敗例 以下の2行で出来そうな気もするが駄目でした(FC5+apachee2.2.2+suexec) RewriteCond %{REQUEST_URI} !^/%{HTTP_HOST}/ <=これは駄目 RewriteRule ^(.*)$ /%{HTTP_HOST}/$1 [L] ## 成功例 RewriteCond %{HTTP_HOST} (tarou.example.con|jirou.example.com|saburou.example.com|shirou.example.com|gorou.example.com) RewriteCond %{REQUEST_URI} !^/(tarou.example.con|jirou.example.com|saburou.example.com|shirou.example.com|gorou.example.com)/ RewriteRule ^(.*)$ /%{HTTP_HOST}/$1 [L] RewriteCond %{HTTP_HOST} (hanako.example.con|haruko.example.com|natuko.example.com|akiko.example.com|fuyuko.example.com) RewriteCond %{REQUEST_URI} !^/(hanako.example.con|haruko.example.com|natuko.example.com|akiko.example.com|fuyuko.example.com)/ RewriteRule ^(.*)$ /%{HTTP_HOST}/$1 [L] ### 以上で出来るようです 上の例では RewriteEngine on はべつとして ひとつの記述に5個のホスト名(で、3行)X2 で 6行必要となっていますが 仮にひとつの記述に10個のホスト名を | でつなげて書くと100個のホスト名では 3行x10= 30行 1000個のホスト名だと 300行にも成りますね ホスト名1個ごとに<VirtualHost コンテナを記述する場合は 最低でも5行づつ X 1000ホスト名 =5000行に成りますので httpd.conf自体のfileサイズを小さくする事は出来ますが このような形でrewriteを使用した場合、 <VirtualHost をひとつひとつ記述するよりもサーバーの負担は おそらく#2さんの言われるように 大きくなるのではないかと思います。
- umasikajiro
- ベストアンサー率67% (545/803)
#1のは 有効な .htaccess に記述する場合だが httpd.conf に書く場合は ><virtualhost></virtualhost> ではなく <Directory /hoge/hoge/>~~</Directory>コンテナの中じゃないと駄目なはず
補足
ありがとうございます。 もちろん.htaccessは利用せずhttpd.confに記述します
- lowrider_2005
- ベストアンサー率40% (1520/3748)
何を一個で済ませたいのでしょう? IPアドレス? プロセス? マシン? ドメイン? <virtualhost>? 問題点は再起動が遅いこととメモリ消費が多いことですか? virtualhostがいくつあろうが、設定以上のプロセスは生成されません。メモリについてはいくつか手段があるので一概には言えない。 mod_rewriteは便利ですが、その分CPUに負担がかかります。ちょっと遅いマシンだと、条件を100行も書くと遅くて耐えられないなんてこともあります。 率直に言って、何が問題点で何をどうしたいのか文面から読み取れないのですが、本当にrewriteがいい手段かどうか、基本設定から見なおしたほうが良いのではないでしょうか。 またOSやapacheのバージョン、ミドルウエアの有無、コンパイルオプションやモジュールなども書いておくと解答が得られやすいと思いますよ。
補足
virtualhostを1個ですませたいです。 上記には数百と書いてますが、実勢には数千ありました。 再起動が遅いことはたいした問題ではありませんが、.confファイルが非常に大きくなると、メモリ消費もそれなりに大きくなってきます。 またプロセスの問題ではなく複数のvirtualhostを一つにまとめたいと思っています。 マシン自体はメモリ数ギガあり、負荷では困っていません。 apcheのバージョンでrewriteの動作、virtualhostの動作ちがいますっけ? OSはRedhat系(CENTOS)です。
- umasikajiro
- ベストアンサー率67% (545/803)
例えば http://tarou.example.com/ でアクセスすると URLはそのままで tarou.example.com用のTOPPAGEへアクセス http://hanako.example.com/ だとやはりURLはそのままだがhanako.example.com用のTOPPAGEと言う事ですね? じゃ、もの凄く簡単過ぎて笑っちゃう方法で まず 上の例だと ドキュメントルートディレクトリに tarou.example.com.html と hanako.example.com.html と言うそれぞれのfileをおきます (このfile名が大事です) .htaccessには RewriteEngine on RewriteRule ^$ %{HTTP_HOST}.html [L] ### この2行だけでOK ## [L] の部分を [R] にするとリダイレクトしてURLが変わって ばれるので注意
補足
ありがとうございます。 でも期待する回答ではありませんでした。
お礼
詳細な記述大変ありがとうございます。 お礼が送れたこと申し訳ないです。 教えていただいた部分 (tarou.example.con|jirou.example.com|saburou.example.com|shirou.example.com|gorou.example.com) は (.*?.example.con) はなんとなくこれでいけそうな気がします。(試してない・・) とにかくありがとうございました