/sys/log/blacklist
/sys/lib/httpd.conf
$web/etc/namespace_80
REQUEST_URI
~user
-d
オプション
-f
オプション
formparse
webm
2003/01/11
今回の改訂は、様々なポート(80
, 443
, 8080
など)を併用しながらサーバを運用する場合に発生する管理上の問題点に焦点があてられています。柔軟に、わかりやすくサーバが運用される新たな仕組みが今回の改訂で提供されました。
今回の改訂内容は多岐にわたり、かつ仕様上の変更が発生しているので、2.0 版にしています。
/sys/log/blacklist
/sys/log/blacklist
に記録します。それとともに、このクライアントのアクセスをガードします。このガードは httpd
をリセットするまで続きます。(これはサーバモードでのみ有効です)/sys/lib/httpd.conf
/sys/lib/httpd.conf
を導入しました。Pegasus の default の設定より、このファイルの設定が優先します。このファイルが存在しないとき、あるいは設定が無い場合には、Pegasus の省略時の設定が使用されます。httpd
のオプションの方が、これらの設定より優先します。
$home
は web ドキュメントの管理者のホームディレクトリ、$web
は、その管理者が管理する web ルート(root) とします。この場合ドキュメントは $web/doc
以下のディレクトリに置かれることになります。例えば、ユーザ alice
の場合には $web
は/usr/alice/webです。実ホストと仮想ホストの
$web
の値は /sys/lib/httpd.rewrite
によって決定されます。$web/etc/namespace_80
namespace.cgi
が namespace_80
に変更されました。これはドキュメントの管理者がポートごとに名前空間を編成できるようになったことを意味しているだけではありません。これまではこのファイルは単に CGI のために存在しました。今回はCGI を使用していない場合にも、ここで編成編成された名前空間に従ってファイルの探索が行われるようになりました。(図3 および図4) 図3. これまでの namespace.cgi |
図4. 今回の namespace_80 |
$web/bin/386 $web/bin/rcに置かれた仮想ホストやユーザに固有の実行ファイルは、
$web/etc/namespace.cgi
の中で /bin
にバインドしていましたが、今回はサーバの方で自動的にバインドするようにしました。
/sys/lib/httpd.rewrite
や $web/etc/rewrite
の仕様です。ポートごとに変換ファイルを持たせるのは、感心しません。なぜなら URI 変換の全体像が掴み難くなるからです。そこで1つの変換ファイルで済ませる可能性を追求しました。
変換ファイルの形式に仕様上の変更はありません。意味に僅かの変更が発生しました。変更点は自明なリダイレクションループの表現に意味を与えて積極的に受け入れたことです。これによって多数のポートを一括管理する変換ファイルの表現が、自然なものとなり、分かりやすくなりました。
/etc/handler
の中に、次の例# path mimetype ramfs execpath arg ... *.http - 0 $target *.html text/html 1 $target *.dx_html text/html 0 /bin/dxの最後の行のように
$target
が存在しない場合には、/bin/dx
の後に $target
を付加して解釈したのですが、これは廃止します。$target
が必要なら省略しないで書いて下さい。ですから次のように書きます。# path mimetype unused execpath arg ... *.http - 0 $target *.html text/html 1 $target *.dx_html text/html 0 /bin/dx $targetさらに、今回の改訂では
$target
で示されるファイルは実際に存在する必要はなくなりました。また、ramfs
は CGI を実行した場合には必ず生成されるようになりました。従って ramfs
の使用の有無を知らせるフィールドは意味がなくなりました。(とりあえず未使用のフィールドとして残してあります。)REQUEST_URI
REQUEST_URI
の仕様を変更しました。/
" で終わると(つまりディレクトリ名が要求された場合)、この後に index.html
を追加して解釈します。これまでは、その時に本来の要求が "/
" で終わっていたことを CGI から知ることはできませんでした。今回の改訂ではこの場合には環境変数 REQUEST_URI
の値は本来の要求を、環境変数 REQUEST_PATH
が index.html
を付加した値を持つことにしました。~user
~user
のリクエストが拒否されます。virtual.co.jp
を仮想ホストのドメイン名とすると、これまでは、http://virtual.co.jp/~aliceのようなリクエストは、仮想ホストがディレクトリ
~alice
を持っていれば受け入れられたのですが、今回の改訂によって拒否されるようになりました。
仮想ホストというのはシステムの運用者から見たときには特別待遇のユーザに過ぎないのであり、それが内部にユーザらしきものを持って運用するのはおかしな事です。(サーバの又貸しにつながります。) 今回の改訂で採用された URI 変換アルゴリズムの自然な帰結としてこうしたことが拒否されるようになったので、その自然なアルゴリズムのまま 2.0 版を提供します。
-d
オプション/sys/lib/httpd.conf
が導入され、その中でサーバの名前を設定できるようになったので、httpd のオプションによるサーバの名前の設定を廃止します。/usr/web/
の代替えは /sys/lib/httpd.conf
で指定することにしました。(名称は base
になっています。)-f
オプションhttpd
に -f
オプションを与えることによって、この意地悪を取り消すことができるようになっていました。ところが、今回の改訂で採用された URI 変換アルゴリズムでは自然な帰結として必ず拒否されるようになったので、その自然なアルゴリズムのまま 2.0 版を提供します。formparse
formparse
がファイルを受け取れるようになりました。webm
webm
は今回追加されたサーバアプリケーションです。webm
を使用するとクライアントからサーバにファイルを転送したり、サーバのファイルを削除したりできます。webm
は web のファイルマネージャとして機能し、FTP の代わりに使用でき、便利です。(WebDev のサポートも魅力的ですが、もう少し様子を見ましょう)