いつも大変お世話になっております。
これまでaaa.comという1つのドメインで普通の自宅サーバ生活を送っていた者です。
最近、事情がありbbb.bizというドメインを1つ追加取得したため、1つのマシンでaaa.comとbbb.bizの2つのドメイン運用を試みました。
おやじ様の 「名前ベース・バーチャルホストWWWサーバの構築」を参考にさせていただき、内部・外部いずれからもサイトを確認することができ、CGIも問題なく動いているのですが、なぜ正常に動いているのかわからない点がありますので、ご教授いただければ幸いです。
まず、当方のconfファイルの記述は下記のようになっており、おやじ様のマニュアルどおり、vhost.confをIncludeするようにしています。
** httpd.confの内容 *******************
ThreadsPerChild 250
MaxRequestsPerChild 0
ServerRoot "C:/Program Files/Apache Software Foundation/Apache2.2"
Listen 80
LoadModule actions_module modules/mod_actions.so
LoadModule alias_module modules/mod_alias.so
LoadModule asis_module modules/mod_asis.so
LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule authn_default_module modules/mod_authn_default.so
LoadModule authn_file_module modules/mod_authn_file.so
LoadModule authz_default_module modules/mod_authz_default.so
LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
LoadModule authz_host_module modules/mod_authz_host.so
LoadModule authz_user_module modules/mod_authz_user.so
LoadModule autoindex_module modules/mod_autoindex.so
LoadModule cgi_module modules/mod_cgi.so
LoadModule dir_module modules/mod_dir.so
LoadModule env_module modules/mod_env.so
LoadModule imagemap_module modules/mod_imagemap.so
LoadModule include_module modules/mod_include.so
LoadModule isapi_module modules/mod_isapi.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule mime_module modules/mod_mime.so
LoadModule negotiation_module modules/mod_negotiation.so
LoadModule setenvif_module modules/mod_setenvif.so
LoadModule userdir_module modules/mod_userdir.so
ServerAdmin webmaster@aaa.com
ServerName www.aaa.com:80
DocumentRoot "D:/wwwroot"
<Directory />
Options FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Satisfy all
</Directory>
<Directory "D:/wwwroot">
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
UserDir D:/wwwroot/users/*/public_html
<Directory D:/wwwroot/users/*/public_html>
AllowOverride FileInfo AuthConfig Limit
Options 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>
<IfModule dir_module>
DirectoryIndex index.html index.htm
</IfModule>
<FilesMatch "^\.ht">
Order allow,deny
Deny from all
</FilesMatch>
ErrorLog logs/error.log
LogLevel warn
<IfModule log_config_module>
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
<IfModule logio_module>
# You need to enable mod_logio.c to use %I and %O
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
</IfModule>
CustomLog logs/access.log common
</IfModule>
<IfModule alias_module>
ScriptAlias /cgi-bin/ D:/wwwroot/cgi-bin/
</IfModule>
<Directory "D:/wwwroot/cgi-bin">
AllowOverride None
Options None
Order allow,deny
Allow from all
</Directory>
<Directory "D:/wwwroot/users/*/public_html/cgi-bin">
Options +ExecCGI
AddHandler cgi-script .cgi .pl
</Directory>
<Directory "D:/wwwroot/xmailcfg/cgi">
Options +ExecCGI
</Directory>
DefaultType text/plain
<IfModule mime_module>
TypesConfig conf/mime.types
AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz
AddHandler cgi-script .cgi .pl
</IfModule>
Include conf/vhosts.conf
<IfModule ssl_module>
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
</IfModule>
** httpd.confおわり ********************
** vhost/confの内容 ********************
NameVirtualHost *
<VirtualHost *>
ServerAdmin webmaster@aaa.com
DocumentRoot "D:/wwwroot"
ServerName www.aaa.com
UserDir D:/wwwroot/users/*/public_html
<Directory D:/wwwroot/users/*/public_html>
AllowOverride FileInfo AuthConfig Limit
Options 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>
ErrorLog logs/error.log
CustomLog logs/access.log common
</VirtualHost>
<VirtualHost *>
ServerAdmin webmaster@bbb.biz
DocumentRoot "E:/wwwroot2"
ServerName www.bbb.biz
UserDir E:/wwwroot2/users/*/public_html
<Directory E:/wwwroot2/users/*/public_html>
AllowOverride FileInfo AuthConfig Limit
Options 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>
ErrorLog logs/example.com-error.log
CustomLog logs/example.com-access.log common
</VirtualHost>
** vhost.confおわり ********************
わからない点は、この記述でのcgiの実行についてなのですが・・・。
私はこのvhost.confを作成しているとき、aaa.comについてはhttpd.confにScriptAliasについて記述してあるのでもしかしたら動くかもしれないが、bbb.bizについてはcgiを実行させることは無理だろうと考えていました。
ところが、試しにbbb.bizの/~user名以下にcgiを置いて試したところ正常に動いているのです。
aaa.comもbbb.bizも/~user名でhtmlやcgiの実行を分ける設定になっておりますが、vhost.confでcgiについては何も記述していないにも関わらず、/~usre名以下のcgiのDirectoryで実行可能、つまり現在正常に動いているのはなぜなのでしょうか?
お忙しいところ、つまらない質問で申し訳ありませんがよろしくお願いします。
> 私はこのvhost.confを作成しているとき、aaa.comについてはhttpd.confにScriptAliasについて記述してあるのでもしかしたら動くかもしれないが、bbb.bizについてはcgiを実行させることは無理だろうと考えていました。
> ところが、試しにbbb.bizの/~user名以下にcgiを置いて試したところ正常に動いているのです。
> aaa.comもbbb.bizも/~user名でhtmlやcgiの実行を分ける設定になっておりますが、vhost.confでcgiについては何も記述していないにも関わらず、/~usre名以下のcgiのDirectoryで実行可能、つまり現在正常に動いているのはなぜなのでしょうか?
今一、おっしゃっていることが理解できないのですが、上記の設定では、
1. 「bbb.bizの/~user名以下にcgiを置いて試したところ正常に動いている」のは正しい動きである。それは、
> AddHandler cgi-script .cgi .pl
とグローバルで定義しており、バーチャルホスト(bbb.biz)で、下記のとおりExecCGIとしているので実行できる。
> Options SymLinksIfOwnerMatch ExecCGI IncludesNoExec
2. 「/~usre名以下のcgiのDirectoryで実行可能」というのがcgi-binのことなら1項で動いてしまう。グローバルで
> ScriptAlias /cgi-bin/ D:/wwwroot/cgi-bin/
という定義は、ユーザディレクトリ環境では取り扱い注意である。下記を参照してください。
http://www.aconus.com/~oyaji/tips/apache_tips3.htm
全体に、設定に冗長があり、どの設定でどう動かすのが正解かが把握できていない気がします。cgi-binという名前は「ScriptAlias」を残す限り注意が必要です。
上記の設定ないようと、説明いただいた内容から全体としてやりたいことが見えないのでこうしたらよいのでは?アドバイスはできませんが・・。上のtipsと下記FAQを見ていただくと少し整理ができるのではないでしょうか?
http://www.aconus.com/~oyaji/faq/faq.htm
わかりづらい文章でお時間をとらせてしまい大変申し訳ありません。
実は現在どちらのドメインも問題なく稼動しているのですが、これがvhost.confの記述により正常に稼動しているのであれば、httpd.confに不要な記述があるのではないかと思いご質問させていただきました。
ます当方の環境を簡単に記載させていただきます。
ドメイン1 aaa.com
D:/wwwroot/users/user1/public_html → htmlファイルの格納場所
D:/wwwroot/users/user1/public_html/cgi-bin → cgiファイルの格納場所
ドメイン2 bbb.biz
E:/wwwroot2/users/user1/public_html → htmlファイルの格納場所
E:/wwwroot2/users/user1/public_html/cgi-bin → cgiファイルの格納場所
いずれも、wwwroot/cgi-bin、wwwroot2/cgi-binのcgiファイルは実行させたくない。
上記のような環境で、vhost.confに
<VirtualHost *>
ServerAdmin webmaster@aaa.com
DocumentRoot "D:/wwwroot"
ServerName www.aaa.com
UserDir D:/wwwroot/users/*/public_html
<Directory D:/wwwroot/users/*/public_html>
AllowOverride FileInfo AuthConfig Limit
Options 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>
ErrorLog logs/error.log
CustomLog logs/access.log common
</VirtualHost>
<VirtualHost *>
ServerAdmin webmaster@bbb.biz
DocumentRoot "E:/wwwroot2"
ServerName www.bbb.biz
UserDir E:/wwwroot2/users/*/public_html
<Directory E:/wwwroot2/users/*/public_html>
AllowOverride FileInfo AuthConfig Limit
Options 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>
と記述している場合、
htmlに関しては、httpd.confの
DocumentRoot "D:/wwwroot"
<Directory />
Options FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Satisfy all
</Directory>
<Directory "D:/wwwroot">
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
UserDir D:/wwwroot/users/*/public_html
<Directory D:/wwwroot/users/*/public_html>
AllowOverride FileInfo AuthConfig Limit
Options 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>
は不要なのではないか。
また、cgiに関しては、httpd.confの
ScriptAlias /cgi-bin/ D:/wwwroot/cgi-bin/
</IfModule>
<Directory "D:/wwwroot/cgi-bin">
AllowOverride None
Options None
Order allow,deny
Allow from all
</Directory>
<Directory "D:/wwwroot/users/*/public_html/cgi-bin">
Options +ExecCGI
AddHandler cgi-script .cgi .pl
</Directory>
<Directory "D:/wwwroot/xmailcfg/cgi">
Options +ExecCGI
</Directory>
は不要なのではないかと思った次第です。
vhost.confの記述で正常に稼動しているのであれば、httpd.confに重複する記述がなくても良いのではと思った次第です。
お手数をおかけして申し訳ありませんでした。
実際に試してみました。
htmlについては、httpd.confの
DocumentRoot "D:/wwwroot"
<Directory />
Options FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Satisfy all
</Directory>
<Directory "D:/wwwroot">
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
UserDir D:/wwwroot/users/*/public_html
<Directory D:/wwwroot/users/*/public_html>
AllowOverride FileInfo AuthConfig Limit
Options 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>
を、全部コメントアウトしたところ、動かないどころかapacheそのものがエラーで再起動しませんでした。
cgiについては、http.confの
ScriptAlias /cgi-bin/ D:/wwwroot/cgi-bin/
と
<Directory "D:/wwwroot/cgi-bin">
AllowOverride None
Options None
Order allow,deny
Allow from all
</Directory>
<Directory "D:/wwwroot/users/*/public_html/cgi-bin">
Options +ExecCGI
AddHandler cgi-script .cgi .pl
</Directory>
<Directory "D:/wwwroot/xmailcfg/cgi">
Options +ExecCGI
</Directory>
をコメントアウトしても、いずれのドメインも正常に動いております。
実際にやってみれば良かったのですが、掲示板をお騒がせして申し訳ありませんでした。
もう少しapacheのマニュアル等を読んで勉強しなくてはと実感した次第です。
ありがとうございました。
> を、全部コメントアウトしたところ、動かないどころかapacheそのものがエラーで再起動しませんでした。
> cgiについては、http.confの
>
> ScriptAlias /cgi-bin/ D:/wwwroot/cgi-bin/
>
> と
>
> <Directory "D:/wwwroot/cgi-bin">
> AllowOverride None
> Options None
> Order allow,deny
> Allow from all
> </Directory>
> <Directory "D:/wwwroot/users/*/public_html/cgi-bin">
> Options +ExecCGI
> AddHandler cgi-script .cgi .pl
> </Directory>
> <Directory "D:/wwwroot/xmailcfg/cgi">
> Options +ExecCGI
> </Directory>
>
> をコメントアウトしても、いずれのドメインも正常に動いております。
>
> 実際にやってみれば良かったのですが、掲示板をお騒がせして申し訳ありませんでした。
> もう少しapacheのマニュアル等を読んで勉強しなくてはと実感した次第です。
> ありがとうございました。
Apacheは少しわかりにくいですが、ドキュメントがしっかりしているのでじっくり読めばいろいろ書いてあるので、なるべくがんばって読むほうがよいと思います。
そして、それを元にして自分の考えで実践してみて、結果をフィードバックしていくと、それぞれの設定が持つ意味がわかってきます。おやじはそうやって一つ一つ勉強してきました。
因みに、現時点でhttpd.confの下記のUserDir関係の設定(もともとコメントアウトされていたはず)は、なんら働きませんので盲腸です。
UserDir D:/wwwroot/users/*/public_html
<Directory D:/wwwroot/users/*/public_html>
AllowOverride FileInfo AuthConfig Limit
Options 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>
コメント&ご助言ありがとうございます。
ドメイン1つの時はAnhttpdを使用していまして、最近Apacheに切り替えたのですが、いずれもマニュアル任せで仕組みを理解していなかったです。
おやじ様のおっしゃるとおり、Apacheのドキュメントをよく読んで、今後はセキュリティなどの面についてもしっかりと構築していこうと思います。
また、お世話になることがあるかと思いますが今後ともよろしくお願いいたします。
今回はありがとうございました。