投稿日:2003年03月10日 作成鷹の巣

No.8846 Apache2 For Win32のバーチャルホストの設定方法は?



Apache2 For Win32のバーチャルホストの設定方法は?

No.8846 投稿時間:2003年03月10日(Mon) 11:55 投稿者名:高地 哲男 URL:http://www.k-emiko.com

Apache2 For Win32でバーチャルホストの設定をして、バーチャルホストでサーバーを起動したのですが、

バーチャルホストの時にCGIが動かなくなります。

あと、もう一つは、バーチャルホストの時に、パスがディレクトリーでの設定で

index.htmとか、kaisya.htmとかファイルで指定してのバーチャルホストの設定ができないんですけど、だれか教えてください。

httpd.conの設定内容

1
UseCanonicalName ON

2
Options Indexes FollowSymLinks MultiViews ExecCGI Includes

3
DirectoryIndex index.htm kaisya.htm index.html index.html.var

4
ScriptAlias /cgi-bin/ "C:/www/public_html/"

5
#<Directory "C:/Program Files/Apache Group/Apache2/cgi-bin">
<Directory "C:/www/public_html/cgi-bin/">
AllowOverride None
Options ExecCGI
Order allow,deny
Allow from all
</Directory>

6
LanguagePriority ja en da nl et fr de el it ja ko no pl pt pt-br ltz ca es sv tw

7
AddDefaultCharset SHIFT_JIS

8
AddType application/x-tar .tgz
AddType image/x-icon .ico

9
AddHandler cgi-script .cgi
AddHandler cgi-script .pl

10
AddHandler imap-file map

11
AddType text/html .shtml
AddOutputFilter INCLUDES .shtml
AddType text/html .html
AddOutputFilter INCLUDES .html

12
NameVirtualHost *

<VirtualHost *>
ServerAdmin メールアドレス
DocumentRoot c:/***/***/
ServerName kaisya.com
ErrorLog logs/dummy-host.example.com-error_log
CustomLog logs/dummy-host.example.com-access_log common
</VirtualHost>

<VirtualHost *>
ServerAdmin メールアドレス
DocumentRoot c:/***/***/
ServerName kogin
ErrorLog logs/dummy-host.example.com-error_log
CustomLog logs/dummy-host.example.com-access_log common
</VirtualHost>

あとは、それなりに設定してあります。

ドメインkaisyaでc:/***/***のkaisya.htmにアクセス

ドメインkoginでc:/***/***のindex.htmにアクセスしたいのですが。

それと、バーチャルホスト起動時にCGIが動かなくなるのですが、通常の設定のほかにバーチャルホストの時は

別な設定がいるのでしょうか。

だれか教えていただけないでしょうか。

なにぶん初心者なもので、理解力に乏しいので、なるべく具体的に、何処のどの部分にどのように書き込めばいいのか

また、どのように変更すればいいのか教えてください。


これでバーチャルホストでアクセスさせています。

No.8869 投稿時間:2003年03月11日(Tue) 00:08 投稿者名:Taka_P URL:

> 5
> #<Directory "C:/Program Files/Apache Group/Apache2/cgi-bin">
> <Directory "C:/www/public_html/cgi-bin/">
> AllowOverride None
> Options ExecCGI
> Order allow,deny
> Allow from all
> </Directory>



<Directory "C:/www/example">
AllowOverride FileInfo AuthConfig Limit
# Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec ExecCGI
Options MultiViews SymLinksIfOwnerMatch IncludesNoExec ExecCGI
<Limit GET POST OPTIONS PROPFIND>
Order allow,deny
Allow from all
</Limit>
<LimitExcept GET POST OPTIONS PROPFIND>
Order deny,allow
Deny from all
</LimitExcept>
</Directory>

かな?こちらはこれでバーチャルホストでアクセスさせています。


この様ににしたいのですが。

No.8876 投稿時間:2003年03月11日(Tue) 19:26 投稿者名:高地 哲男 URL:http://www.k-emiko.com

> 早速有難うございます。CGIの設定、後日試してみます。
> バァーチャルホストで、ファイル名でアクセスするにはどうすればいいのでしょう
>
> 例えば、AAA = C:/www/AAA/index.htm
> BBB = C:/WWW/AAA/BBB.htm

見たいにしたいのですが。


DirectoryIndexはURLが/で終わるアクセスに対して補間されるファイル名を指定します。

No.8895 投稿時間:2003年03月12日(Wed) 10:34 投稿者名:Taka_P URL:

> > 早速有難うございます。CGIの設定、後日試してみます。
> > バァーチャルホストで、ファイル名でアクセスするにはどうすればいいのでしょう

DirectoryIndexはURLが/で終わるアクセスに対して補間されるファイル名を指定します。
ファイル名を複数指定すればその順に補間されます。
例えば、 DirectoryIndex home.html index.html aaa.html と書くと、home.htmlが
存在しているとそれを見せ、home.htmlが無くて index.htmlがある場合はindex.html、
いずれもない場合はaaa.htmlを見せると思いますが、どうかな?


ドメインAとBで同じフォルダ内の別のデフォルトインデックスファイルを表示したい。

No.8904 投稿時間:2003年03月12日(Wed) 16:05 投稿者名:高地 哲男 URL:http://www.k-emiko.com

それは分かるんですが、

例えば、DirectoryIndexで、ファイル名を指定して

DirectoryIndex index.htm kaisya.htm index.html とします。

ドメインAと ドメインB のアクセスファイルが同じフォルダにある場合、ドメインAでindex.htmにアクセスしたい場合は、問題ないですよね。
でも、ドメインBでkaisya.htmにアクセスしたい場合は、最初にindex.htmを探してしまい、結局 index.htmが表示されてしまいます。

この場合で、ドメインAでindex.htm ドメインBでkaisya.htmにアクセスしたいのですがどうすればいいのでしょう。


CGI で行なう

No.8907 投稿時間:2003年03月12日(Wed) 16:33 投稿者名:OAK URL:

> この場合で、ドメインAでindex.htm ドメインBでkaisya.htmにアクセスしたいのですがどうすればいいのでしょう。

CGIを組めば簡単ですよ。

(1)そのディレクトリーをCGI可能にしておく
(2)ディレクトリー指定で来た時、index.html より index.cgiを優先させる。
(3)CGIで環境変数から、呼び出しホスト名をもとめ
それぞれ index.html か kaisya.html のどちらかをオープンして、出せば良い。


だいたい分かりました。

No.8911 投稿時間:2003年03月12日(Wed) 18:56 投稿者名:高地 哲男 URL:http://www.k-emiko.com

だいたい分かりました。
バーチャルホストにしておいて、最初の呼び出しファイルをindex.cgiに設定しておいて
どのドメインからでも、index.cgiが開くようにすればいいのですね。

ただ問題はどのようにCGIを書けばいいのですか、長いプログラムでないのであれば、教えていただけないでしょうか。

また、そのようにしてサーバーを稼動して、サーバーが重たくなったりはしないですか。


2.0.44 Win32 でバーチャルホストとCGIを同時に設定

No.8900 投稿時間:2003年03月12日(Wed) 11:35 投稿者名:陸上部キャプテン URL:http://www.usa.ne.jp/

一応私のApache2 Win32 2.0.44の設定ファイルですが、肝心な

部分のみ掲載致しました、一応UNIX系OSもこの部分の設定は全く

同じ内容で大丈夫です(D:が/homeなどにはなるけど基本的に同じ)

これを自分のパターンに当てはめて

設定を進行すれば、大丈夫と思いますが注意と言う程でもないの

ですが、NameVirtualHost 192.168.0.100



<VirtualHost 192.168.0.100>の192.168.0.100の部分は、

適宣自分の環境に合わせる事も必要かもしれません
(192.168.0.2や*等に)


参考になればと思い、掲載致します。
(気になる部分のみです)

DocumentRoot "D:/WWW/OITA/public_html"

<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>

<Directory "D:/WWW/OITA/public_html">
Options FollowSymLinks Includes ExecCGI MultiViews
AllowOverride None
Order allow,deny
Allow from all
</Directory>


<Directory "D:/WWW/CHIKU-NET/public_html">
Options FollowSymLinks Includes ExecCGI MultiViews
AllowOverride None
Order allow,deny
Allow from all
</Directory>

<Directory "D:/WWW/SIRAGA/public_html">
Options FollowSymLinks Includes ExecCGI MultiViews
AllowOverride None
Order allow,deny
Allow from all
</Directory>

<Directory "D:/WWW/BRAINWAVE/public_html">
Options FollowSymLinks Includes ExecCGI MultiViews
AllowOverride None
Order allow,deny
Allow from all
</Directory>


UserDir "D:/WWW/*/public_html"



<Directory "D:/WWW/*/public_html">
AllowOverride FileInfo AuthConfig Limit
Options MultiViews SymLinksIfOwnerMatch ExecCGI IncludesNoExec
<Limit GET POST OPTIONS PROPFIND>
Order allow,deny
Allow from all
</Limit>
<LimitExcept GET POST OPTIONS PROPFIND>
Order deny,allow
Deny from all
</LimitExcept>
</Directory>


DirectoryIndex index.htm index.html


AccessFileName .htaccess

以下の部分はコメントアウトに設定して下さい、そうする事と下記の設定を
合わせますと、cgi-binと付けなくても良くなるので(私の場合)
#
#ScriptAlias /cgi-bin/ "C:/Apache2/XX-_-XX/Apache2/cgi-bin/"
#
#
# "C:/Apache2/XX-_-XX/Apache2/cgi-bin" should be changed to whatever your ScriptAliased
# CGI directory exists, if you have that configured.
#
#<Directory "C:/Apache2/XX-_-XX/Apache2/cgi-bin">
# AllowOverride None
# Options None
# Order allow,deny
# Allow from all
#</Directory>
#



AddHandler cgi-script .cgi
AddHandler cgi-script .pl


### Section 3: Virtual Hosts



NameVirtualHost 192.168.0.100


<VirtualHost 192.168.0.100>
ServerName www.usa.ne.jp
ServerAdmin info@usa.ne.jp
DocumentRoot "D:/WWW/OITA/public_html"
</VirtualHost>


<VirtualHost 192.168.0.100>
ServerName www.chiku-net.com
ServerAdmin info@chiku-net.com
DocumentRoot "D:/WWW/CHIKU-NET/public_html"
</VirtualHost>


<VirtualHost 192.168.0.100>
ServerName www.shiraga-carship.co.jp
ServerAdmin shiraga@shiraga-carship.co.jp
DocumentRoot "D:/WWW/SIRAGA/public_html"
</VirtualHost>


<VirtualHost 192.168.0.100>
ServerName www.brainwave.jp
ServerAdmin bw@brainwave.jp
DocumentRoot "D:/WWW/BRAINWAVE/public_html"
</VirtualHost>


以下省略(上記URLは掲載の許可を取得済み)


ドメインごとにアクセスするフォルダを変えてある設定だと思います。

No.8906 投稿時間:2003年03月12日(Wed) 16:14 投稿者名:高地 哲男 URL:http://www.k-emiko.com

大変参考に為ります、有難うございます。

でも、これでは、ドメインごとにアクセスするフォルダを変えてある設定だと思います。

私の場合は、今現在、AN HTTPDでサーバーを起動しています。

AN HTTPDでは、複数のドメインでアクセスするフォルダを変えずに、アクセスするファイル名を指定してページを開けます。

ドメインA と ドメインB とでアクセスするフォルダは同じとして(www/*****)

その中の、ドメインAでは、index.htmにアクセス

ドメインBでは、kaisya.htmにアクセスしたいのです。

つまり、ドメインAで、index.htmを開きたいし

ドメインBで kaisya.htmを開きたいのです。

このようにするにはどうすればいいのでしょう、また、Apache2では、このような設定ができないのでしょうか。

教えてください。


アクセスディレクトリの分岐かCGIでHOSTヘッダーによる分岐を利用するしかないでしょう。

No.8908 投稿時間:2003年03月12日(Wed) 17:08 投稿者名:APACHE URL:http://kemuri-net.dip.jp/~server/

> このようにするにはどうすればいいのでしょう、また、Apache2では、このような設定ができないのでしょうか。
Apacheで行う場合は
上記記載のネームベースバーチャルホストによるアクセスディレクトリの分岐か
PHPやCGIでHOSTヘッダーによる分岐を利用するしかないでしょう。


大変参考になりました。

No.8910 投稿時間:2003年03月12日(Wed) 18:48 投稿者名:高地 哲男 URL:http://www.k-emiko.com

有難うございます。
大変参考になりました、やっぱりセキュリティー上、直接ファイルでの指定はできない・


CGIで分岐してファイルを指定する場合は、どのようなプログラムになるのですか。

No.8912 投稿時間:2003年03月12日(Wed) 18:58 投稿者名:高地 哲男 URL:http://www.k-emiko.com

CGIで分岐してファイルを指定する場合は、どのようなプログラムになるのですか。

また、そうした場合の不都合などは無いのですか。


CGIでホスト名取得後の処理方法は?

No.8936 投稿時間:2003年03月13日(Thu) 16:53 投稿者名:高地 哲男 URL:http://www.k-emiko.com

#!c:/perl/bin/perl

print "Content-type: text/html\n\n";

print "<HTML>\n";
sub get_host {
$host = $ENV{'REMOTE_HOST'};
$addr = $ENV{'REMOTE_ADDR'};

if ($gethostbyaddr) {
if ($host eq "" || $host eq "") {
$host = gethostbyaddr(pack("C4", split(/\./, $addr)), 2);
}
}
if ($host eq "") { $host = $addr; }
}

これでホスト名は取得できますよね、問題は、このあとなんですけど

ifで条件をつければいいのですよね。

その、条件の付け方なんですが、どのような構文になるのでしょう。


ホスト名取得とその後の処理

No.8937 投稿時間:2003年03月13日(Thu) 16:55 投稿者名:高地 哲男 URL:http://www.k-emiko.com

> #!c:/perl/bin/perl
>
> print "Content-type: text/html\n\n";
>
> print "<HTML>\n";
> sub get_host {
> $host = $ENV{'REMOTE_HOST'};
> $addr = $ENV{'REMOTE_ADDR'};
>
> if ($gethostbyaddr) {
> if ($host eq "" || $host eq "") {
> $host = gethostbyaddr(pack("C4", split(/\./, $addr)), 2);
> }
> }
> if ($host eq "") { $host = $addr; }
> }
>
> これでホスト名は取得できますよね、問題は、このあとなんですけど
>
> ifで条件をつければいいのですよね。
>
> その、条件の付け方なんですが、どのような構文になるのでしょう。


ちょっと違います

No.8938 投稿時間:2003年03月13日(Thu) 17:46 投稿者名:OAK URL:

> #!c:/perl/bin/perl
>
> print "Content-type: text/html\n\n";

ここまでは大変結構。誰が書いてもだいたいこう書きます。


> print "<HTML>\n";
> sub get_host {
> $host = $ENV{'REMOTE_HOST'};
> $addr = $ENV{'REMOTE_ADDR'};
>
> if ($gethostbyaddr) {
> if ($host eq "" || $host eq "") {
> $host = gethostbyaddr(pack("C4", split(/\./, $addr)), 2);
> }
> }
> if ($host eq "") { $host = $addr; }
> }
>

少しはやる気になってマニュアルを探したのですね。ちょっと残念でした。
これは接続元のホスト名を求めるルーチンです。だれがアクセスして来たかを調べるには
有効ですが、バーチャルホストのホスト名では有りません。

バーチャルホストのホスト名は $ENV{'HTTP_HOST'} です。


知識がついていかないだけです。

No.8940 投稿時間:2003年03月13日(Thu) 18:47 投稿者名:高地 哲男 URL:http://www.k-emiko.com

やる気はあるのです、
ただ、知識がついていかないだけです。

今日も、パソコン屋でCGI・環境変数の本を探しに言ったのですが、私が読んで分かる本が無いのです。

プログラムはまったく初心者なので、VisualBasicでたまに遊ぶ程度ですから。

あそこまでは、何とかインターネットで調べたのですが、そのあとに取得したホスト名をどうやって ifで設定するのか

指定のファイルを開くコマンドとか、まったく分かりません。


Perlの場合とPHPの場合

No.8941 投稿時間:2003年03月13日(Thu) 19:10 投稿者名:APACHE URL:http://kemuri-net.dip.jp/~server/

> プログラムはまったく初心者なので、VisualBasicでたまに遊ぶ程度ですから。
>
> あそこまでは、何とかインターネットで調べたのですが、そのあとに取得したホスト名をどうやって ifで設定するのか
>
> 指定のファイルを開くコマンドとか、まったく分かりません。
VBいじってれば分かりそうだけどなぁ
・Perlの場合
http://kemuri-net.dip.jp/~server/cgisource/http_hostif.txt

・PHPの場合
http://kemuri-net.dip.jp/~server/phpsource/http_hostif.txt
これでいけるはずです。
ちなみに設定したドメインで分岐しますが
HTTP_HOSTを取得できない場合や設定されたドメインと違う場合は
「処理に失敗しました。」
と表示します。

このとき任意のメッセージを表示したいときは
・CGI版
処理に失敗しました。
・PHP版
echo "処理に失敗しました。";
の処理に失敗しましたをそれぞれ書き換えてください
なおタグを記述できますが<FONT SIZE="2">など「"」は使えません。
「"」は「\"」か「'」に置き換えてください。


大変お世話になりました。

No.8964 投稿時間:2003年03月14日(Fri) 08:52 投稿者名:高地 哲男 URL:http://www.k-emiko.com

大変お世話になりました。

おかげさまでApache2による、バーチャルホストでのサーバー運営ができるようになりました。

VBで遊ぶと言っても、ただVBを持っていると言う感じで、ほとんどできません。

今回のことで、だいぶ勉強になりました。

環境変数も少し勉強すれば面白そうだし、ひまを見て、少しずつ勉強しようかな?

とにかく、今回お世話になった方々、有難うございました。


|目次|掲示板|過去ログ目次|▲頁先頭|