<URL:http://www.freedom.ne.jp/toki/ruby.html#ruby:script:wwwsrv>
<URL:http://www.ruby-lang.org/en/raa-list.rhtml?name=wwwsrv>
デフォルトのポート番号は8888なので、次に説明する例ではwwwsrvを起動する とhttp://localhost:8888/...にアクセスできるようになります。設定 ファイルを使ってwwwsrv起動するときは-fオプションを使って設定ファ イルのパスを指定します。
ウェブサーバのルートディレクトリ(/)にローカルディレクトリの $HOME/public_htmlをマウントします。
コマンドラインオプションの例
wwwsrv --mount-local=/:$HOME/public_html
設定ファイルの例
__SERVER__ require 'wwwsrv/local' local_path = File::join(ENV['HOME'], 'public_html') local_doc = WWWsrv::LocalFileDocument::new(local_path) SERVER.mount(local_doc, '/')
ウェブサーバのCGIディレクトリ(/cgi)にローカルディレクトリの $HOME/cgiをマウントします。
コマンドラインオプションの例
wwwsrv --mount-cgi=/cgi:$HOME/cgi
設定ファイルの例
__SERVER__ require 'wwwsrv/cgi' cgi_path = File::join(ENV['HOME'], 'cgi') cgi_doc = WWWsrv::CGIdocument::new(cgi_path) SERVER.mount(cgi_doc, '/cgi')
ウェブサーバのルートディレクトリ(/)にローカルディレクトリの $HOME/public_htmlをマウントし、CGIディレクトリ(/cgi)にロー カルディレクトリの$HOME/cgiをマウントします。
コマンドラインオプションの例
wwwsrv --mount-local=/:$HOME/public_html --mount-cgi=/cgi:$HOME/cgi
設定ファイルの例
__SERVER__ require 'wwwsrv/local' local_path = File::join(ENV['HOME'], 'public_html') local_doc = WWWsrv::LocalFileDocument::new(local_path) SERVER.mount(local_doc, '/') require 'wwwsrv/cgi' cgi_path = File::join(ENV['HOME'], 'cgi') cgi_doc = WWWsrv::CGIdocument::new(cgi_path) SERVER.mount(cgi_doc, '/cgi')
$HOME/public_htmlの中のファイルのうち、サフィックスが.cgiの ファイルだけをCGIとして実行されるようにマウントします。サフィックスが .cgi以外のファイルはローカルのファイルの内容がそのまま見えるよう にします。
コマンドラインオプションの例
wwwsrv --mount-local=/:$HOME/public_html --mount-cgi=/:$HOME/public_html:'\.cgi(/|$)'
設定ファイルの例
__SERVER__ local_path = File::join(ENV['HOME'], 'public_html') require 'wwwsrv/local' local_doc = WWWsrv::LocalFileDocument::new(local_path) SERVER.mount('/', local_doc) require 'wwwsrv/cgi' cgi_doc = WWWsrv::CGIdocument::new(local_path) SERVER.mount('/', cgi_doc, :mask => %r!\.cgi(/|$)!) # 注意: 正規表現の`($|/)'はPATH_INFOを得るために必要です。
$HOME/public_htmlの中のファイルのうち、サフィックスが .shtmlのファイルでSSIを実行するようにマウントします。
コマンドラインオプションの例
wwwsrv --mount-local=/:$HOME/public_html --attach-ssi=/:'\.shtml$'
設定ファイルの例
__SERVER__ # 注意: 先にローカルファイルをマウントする必要があります。 require 'wwwsrv/local' local_path = File::join(ENV['HOME'], 'public_html') local_doc = WWWsrv::LocalFileDocument::new(local_path) SERVER.mount(local_doc, '/') require 'wwwsrv/ssi' SERVER.attach('/', :mask => %r!\.shtml$!) { |document| WWWsrv::SSIdocument::new(document) }
$HOME/public_htmlの中のファイルのうち、サフィックスが.cgi のファイルをCGIとして実行するようにマウントし、サフィックスが.shtml のファイルでSSIを実行するようにマウントします。それ以外のファイルはロー カルのファイルがそのまま見えるようにします。
コマンドラインオプションの例
wwwsrv --mount-local=/:$HOME/public_html --mount-cgi=/:$HOME/public_html:'\.cgi(/|$)' --attach-ssi=/:'\.shtml?$'
設定ファイルの例
__SERVER__ local_path = File::join(ENV['HOME'], 'public_html') require 'wwwsrv/local' local_doc = WWWsrv::LocalFileDocument::new(local_path) SERVER.mount(local_doc, '/') requre 'wwwsrv/cgi' cgi_doc = WWWsrv::CGIdocument::new(local_path) SERVER.mount(cgi_doc, '/', :mask => %r!\.cgi(/|$)!) require 'wwwsrv/ssi' SERVER.attach('/', :mask => %r!\.shtml?$!) { |document| WWWsrv::SSIdocument::new(document) }
ローカルホストの5678のポート番号で動いているFastCGIアプリケーションを ウェブサーバのルートディレクトリ(/)にマウントします。
コマンドラインオプションの例
wwwsrv --mount-fcgi=/::inet:localhost:5678
設定ファイルの例
__SERVER__ require 'socket' require 'wwwsrv/fastcgi' # 注意: keep_connがtrueだと動かないFastCGIアプリケーションもあるようです。 fcgi_doc = WWWsrv::FastCGIDocument::new(:keep_conn => true) { TCPsocket::new('localhost', 5678) } SERVER.mount(fcgi_doc, '/')
FastCGIアプリケーションが自力でサーバソケットをオープンできないときは、 wwwsrv配布アーカイブのmiscディレクトリの下にある補助ツールの run_fcgi.rbを使ってFastCGIアプリケーションを起動します。 run_fcgi.rbはインストーラを使ってwwwsrvをインストールすると、 PATHの通ったディレクトリにコピーされます。
run_fcgi inet 5678 '[FastCGIアプリケーションを起動するコマンド]'
ホスト名をホスト名に設定します。デフォルトはlocalhostです。 HTTPではHostヘッダーでブラウザーの認識しているホスト名をサーバへ送る ので、このオプションはデフォルトのホスト名を設定しておくぐらいの意味 しかありません。ただし--strictオプションを設定している場合には、 少し意味があります。
ポート番号をポート番号に設定します。デフォルトは8888です。
--hostnameで設定したホスト名に対応するネットワークインターフェー スに限定して、サーバソケットをオープンします。例えばループバックに対 応するlocalhostにホスト名を設定してこのオプションを使うと、サー バには127.0.0.1というループバックに対応するIPだけからアクセスでまきす。 たとえサーバを起動したホストが別のIP(例えば192.168.0.1など)を持って いたとしても、127.0.0.1のIPアドレス以外からはサーバにアクセスできな くなります。
--strictの設定を解除します。
ログファイルにログを出力します。
ログをファイルに出力しません。
標準出力にログを出力しません。デフォルトでは標準出力にログを出力します。
標準出力にログを出力します。
ファイルに出力するログのレベルをログのレベルに設定します。レベ ルはinternal, debug, system, message, warning, notice, alert, errorの 8種類です。internalはログに出力する情報量が最も多くなり、errorはログ に出力する情報量が最も少くなります。デフォルトのレベルはmessageです。
標準出力に出力するログのレベルをログのレベルに設定します。デフォル トのレベルはmessageです。
リクエスト行をログに記録するレベルをログのレベルに変更します。 デフォルトはmessageレベルでリクエスト行がログに出力されます。 オプションの引数を省略した場合はログのレベルがmessageに変更されます。
リクエストのヘッダをログに記録するレベルをログのレベルに変更しま す。デフォルトはdebugレベルでリクエストのヘッダがログに出力されます。 オプションの引数を省略した場合はログのレベルがmessageに変更されます。
リクエストの内容をログに記録するレベルをログのレベルに変更しま す。デフォルトはinternalレベルでリクエストの内容がログに出力されます。 オプションの引数を省略した場合はログのレベルがmessageに変更されます。
リクエストのトレーラをログに記録するレベルをログのレベルに変更 します。デフォルトはdebugレベルでリクエストのトレーラがログに出力 されます。オプションの引数を省略した場合はログのレベルがmessageに変 更されます。
レスポンスのステータス行をログに記録するレベルをログのレベルに 変更します。デフォルトはsystemレベルでレスポンスのステータス行がログ に出力されます。オプションの引数を省略した場合はログのレベルが messageに変更されます。
レスポンスのヘッダをログに記録するレベルをログのレベルに変更し ます。デフォルトはdebugレベルでレスポンスのヘッダがログに出力されま す。オプションの引数を省略した場合はログのレベルがmessageに変更され ます。
レスポンスの内容をログに記録するレベルをログのレベルに変更しま す。デフォルトはinternalレベルでレスポンスの内容がログに出力されます。 オプションの引数を省略した場合はログのレベルがmessageに変更されます。
レスポンスのトレーラをログに記録するレベルをログのレベルに変更 します。デフォルトはdebugレベルでレスポンスのトレーラがログに出力さ れます。オプションの引数を省略した場合はログのレベルがmessageに変更 されます。
rootユーザで起動したとき、実効ユーザIDを実効ユーザIDに変更しま す。実効ユーザIDはユーザ名または数値で設定できます。デフォルト はnobodyです。
rootユーザで起動したとき、実効グループIDを実効グループIDに変更 します。実効グループIDはグループ名または数値で設定できます。デ フォルトはnobodyです。
タイムアウトを秒数に設定します。デフォルトは300秒です。
持続的接続でHTTPのリクエストを待つときのタイムアウトを秒数に設 定します。デフォルトは15秒です。
デバッグモードで起動します。デバッグモードでは、ドキュメント内部で例 外を捕捉するとエラーレスポンスにバックトースが表示されます。デフォル トではデバッグモードは無効になっています。
デバッグモードを無効にします。
設定ファイルをロードします。
設定ファイルのBASE_DIR
定数に基準ディレクトリを設定します。
デフォルトはカレントディレクトリです。
デーモンプロセスとして起動します。デフォルトでは通常のプロセスとして 起動します。
通常プロセスとして起動します。
プロセスのumask(2)をumaskに設定します。
HUPシグナルを受けるとサーバの設定ファイルをリロードします。デフォル トは無効ですが、デーモンプロセスとして起動したときは自動的に有効にな ります。
HTTP接続の最大接続数を最大接続数に設定します。デフォルトは64個 です。
HTTPの一回の接続で連続して受け付けるこのできる最大のリクエスト数を 最大リクエスト数に設定します。デフォルトは64個です。
正規表現に一致するホストからの接続を許可します。正規表現 の前に!を付けると、一致しないホストになります。
正規表現に一致するホストからの接続を拒否します。正規表現 の前に!を付けると、一致しないホストになります。
正規表現に一致するIPアドレスからの接続を許可します。正規表 現の前に!を付けると、一致しないIPアドレスになります。
正規表現に一致するIPアドレスからの接続を拒否します。正規表 現の前に!を付けると、一致しないIPアドレスになります。
パスの別名を定義します。元のパスの内容を別名のパスからア クセスできるようにします。
クライアントのリクエストの内容を返すドキュメントを、HTTPパスに マウントします。
ローカルのファイルまたはディレクトリをHTTPパスにマウントします。 ローカルパスがファイルの場合、そのファイルをHTTPパスの直 下にマウントします。ローカルパスがディレクトリの場合、ディレク トリの中のファイル全てをHTTPパスにマウントします。正規表現 は省略できます。正規表現を設定すると、ディレクトリ内のファイル の内、正規表現に一致するファイルだけがHTTPパスからアクセ スできるようになります。
ローカルのファイルまたはディレクトリをHTTPパスにCGIとしてマウ ントします。CGIパスがファイルの場合、そのファイルをHTTPパス の直下にマウントします。CGIパスがディレクトリの場合、ディレク トリの中のファイルを全てHTTPパスにマウントします。正規表現 とインタープリタ)は省略できます。正規表現を設定すると、 ディレクトリ内のファイルの内、正規表現に一致するファイルだけが HTTPパスからアクセスできるようになります。インタープリタ を設定すると、インタープリタを使ってCGIスクリプトを実行します。 これはUNIX以外のOSで、スクリプトにインタープリタの設定を埋め込むこと ができない場合に、使うと便利です。インタープリタを設定しない場 合は、CGIスクリプトを実行ファイルそのものとして扱います。
ローカルのファイルまたはディレクトリをHTTPパスにNone Parsed
Header CGIとしてマウントします。各パラメータの意味は、
--mount-cgi
オプションと同じです。
HTTPパスのドキュメントをSSIで処理します。SSIは既存のドキュメン トのフィルターとして動作するので、HTTPパスには先にSSIで処理す るドキュメントがマウントされている必要があります。正規表現と SSIタグは省略できます。正規表現を設定すると、HTTPパス の下の正規表現に一致するドキュメントだけがSSIで処理されます。 SSIタグを設定すると、指定したタグだけが有効になります。複数の SSIタグは,で区切ります。SSIのタグはconfig、include、 echo、fsize、flastmod、execなどがあります。
ローカルパスのファイルまたはディレクトリをeRubyドキュメントと してHTTPパスにマウントします。Tiny eRubyが必要です。ローカ ルパスがファイルの場合、そのファイルをHTTPパスの直下にマウ ントします。ローカルパスがディレクトリの場合、ディレクトリの中 のファイル全てをHTTPパスにマウントします。正規表現と セーフレベルとHTTPメソッドは省略できます。正規表現 を設定すると、ディレクトリ内のファイルの内、正規表現に一致する ファイルだけがHTTPパスからアクセスできるようになります。セー フレベルにはeRubyを実行するセーフレベルを設定します。HTTPメソッ ドにはeRubyの実行を許可するHTTPメソッドを,で区切って指定し ます。デフォルトではGET、HEAD、POSTメソッドだけが 許されます。
HTTPパスのドキュメントをeRubyで処理します。Tiny eRubyが必要で す。eRubyは既存の文書のフィルターとして動作するので、HTTPパス には先にeRubyで処理するドキュメントがマウントされている必要がありま す。正規表現とセーフレベルは省略できます。正規表現 を設定すると、HTTPパスの下の正規表現に一致するドキュメン トだけがeRubyで処理されます。セーフレベルにはeRubyを実行するセー フレベルを設定します。
FastCGIアプリケーションをHTTP pathにマウントします。マウントで きるFastCGIアプリケーションの種類(role)はresponderです。FastCGIアプ リケーションのサーバソケットがUNIXドメインソケットのときは3番目のパ ラメータにunixを設定し、4番目のパラメータにUNIXドメインソケッ トのパスを設定します。FastCGIアプリケーションのサーバソケットが TCP/IPのときは3番目のパラメータにinetを設定し、4番目のパラメー タにホスト名とポート番号を:で区切って設定します。2番目のパラメー タはオプションで、ここに正規表現を設定すると、HTTP path より深いパスの内、正規表現に一致するパスだけがFastCGIアプリケー ションに渡されます。FastCGIアプリケーションが自分自身でサーバソケッ トをオープンすることができなければ、wwwsrvに付属する補助ツールの misc/run_fcgi.rbが使えます。
オプションの簡単な説明を表示します。
バージョンを表示します。
wwwsrvには--configオプションでwwwsrvの設定を記述したファイルを渡 すことができます。設定ファイルは複数のセクションに分かれていて、それぞ れのセクションの記述は、無名のモジュールの中でrubyスクリプトとして実行 れます。
__INIT__セクションの記述は、wwwsrvがセットアップして実行を開始する前 に、一度だけ実行されます。wwwsrvをデーモンプロセスとして起動していて、 HUPシグナルで再起動をかけても、__INIT__セクションが複数回実行される ことはありません。
__WARM_UP__セクションの記述は、wwwsrvがセットアップして実行を開始す
る前に、実行されます。__WARM_UP__セクションは、__INIT__セクションよ
り後で__HOST__セクションより前に、実行されます。wwwsrvがデーモンプロ
セスとして起動していて、HUPシグナルで再起動をかけた場合は、再起動の
度に__WARM_UP__セクションが実行されます。__WARM_UP__セクションを実行
する無名モジュールは__INIT__セクションを実行した無名モジュールを
include
しているので、__WARM_UP__セクションから__INIT__セクショ
ンで定義した定数を参照できます。
__HOST__セクションでは、wwwsrvのサーバオブジェクトを初期化するパラメー
タを、定数として記述します。__HOST__セクションは、__WARM_UP__セクショ
ンより後で__SERVER__セクションより前に、実行されます。wwwsrvをデーモ
ンプロセスとして起動していて、HUPシグナルで再起動をかけた場合は、再
起動の度に__HOST__セクションが実行されます。__HOST__セクションを実行
する無名モジュールは__WARM_UP__セクションを実行した無名モジュールを
include
しているので、__HOST__セクションから__WARM_UP__セクショ
ンで定義した定数を参照できます。
__SERVER__セクションではwwwsrvのサーバオブジェクトがSERVER
定数
に入っていて、このサーバオブジェクトを直接操作することによりサーバを
設定します。このセクションは、__HOST__セクションより後で__COOL_DOWN__
セクションより前に、実行されます。wwwsrvをデーモンプロセスとして起動
していて、HUPシグナルで再起動をかけた場合は、再起動の度に__SERVER__セ
クションが実行されます。__SERVER__セクションを実行する無名モジュール
は__HOST__セクションを実行した無名モジュールをinclude
している
ので、__SERVER__セクションから__HOST__セクションで定義した定数を参照で
きます。
__COOL_DOWN__セクションの記述は、wwwsrvが終了する前に実行されます。
__COOL_DOWN__セクションは、__SERVER__セクションより後で__FINAL__セク
ションより前に、実行されます。wwwsrvがデーモンプロセスとして起動して
いて、HUPシグナルで再起動をかけた場合は、再起動の度に__COOL_DOWN__
セクションが実行されます。__COOL_DOWN__セクションを実行する無名モジュー
ルは__SERVER__セクションを実行した無名モジュールをinclude
して
いるので、__COOL_DOWN__セクションから__SERVER__セクションで定義した定
数を参照できます。
__FINAL__セクションの記述は、wwwsrvが終了する前に、最後に一度だけ実
行されます。__FINAL__セクションは、__COOL_DOWN__セクションより後に実
行されます。wwwsrvをデーモンプロセスとして起動していて、HUPシグナル
で再起動をかけても、__FINAL__セクションが複数回実行されることはあり
ません。__FINAL__セクションを実行する無名モジュールは__COOL_DOWN__モ
ジュールを実行した無名モジュールをinclude
しているので、__FINAL__
セクションから__COOL_DOWN__セクションで定義した定数を参照できます。
include
関係wwwsrvの設定ファイルには様々なセクションがあって、それぞれ異なるタイミ
ングで異なる無名モジュールのスコープで実行されます。このままだと各セク
ションは完全に独立して実行され互いに連携することができないので、wwwsrv
では個々のセクションを実行する無名モジュールに、直前に実行されたセクショ
ンの無名モジュールをinclude
することで、直前に実行したセクション
で定義された定数を参照できるようにしています。
[__INIT__セクションを実行した無名モジュール] ^ | include | [__WARM_UP__セクションを実行した無名モジュール] ^ | include | [__HOST__セクションを実行した無名モジュール] ^ | include | [__SERVER__セクションを実行した無名モジュール] ^ | include | [__COOL_DOWN__セクションを実行した無名モジュール] ^ | include | [__FINAL__セクションを実行した無名モジュール]
このように各セクションを実行する無名モジュールがinclude
の連鎖に
なっていると、例えば__WARM_UP__セクションから__INIT__セクションで定義
した定数を全て参照できます。別の例を挙げると、__SERVER__セクションから
は__HOST__セクションで定義した定数を参照でき、また__HOST__セクションが
上書きしない限り__WARM_UP__セクションや__INIT__セクションで定義した定
数も参照できます(当然ながら__INIT__セクションで定義した定数を参照でき
るのは__WARM_UP__セクションに上書きされない限りにおいて、という条件も
付きます)。
__HOST__セクションではサーバのパラメータを定数で定義します。ほとんどの パラメータには、対応するコマンドラインオプションがあります。設定ファイ ルのパラメータとコマンドラインオプションが競合する場合は、コマンドライ ンオプションが優先されます。
ホスト名を文字列で設定します。省略したときは"localhost"
にな
ります。HTTPリクエストのHostヘッダーが省略されたときのホスト名とし
て使われます。またSTRICT
オプションがtrue
のときにサーバ
ソケットを開くネットワークインターフェースの名前として使われます。
ポート番号を数値で設定します。省略したときは8888であるとみなされま す。
true
に設定すると、HOSTNAME
に対応するネットワークインター
フェースに限定してサーバソケットを開きます。省略したときは
false
になります。
プロセスのumask(2)を数値で設定します。省略したときは親プロセスの umask(2)をそのまま引き継ぎます。
ログファイルを文字列で設定します。省略したときはログファイルを出力 しません。
ログファイルに出力するログのレベルを設定します。ログのレベルには
WWWsrv::Logger::INTERNAL
WWWsrv::Logger::DEBUG
WWWsrv::Logger::SYSTEM
WWWsrv::Logger::MESSAGE
WWWsrv::Logger::WARNING
WWWsrv::Logger::NOTICE
WWWsrv::Logger::ALERT
WWWsrv::Logger::ERROR
の種類があります。WWWsrv::Logger::INTERNAL
はログに出力する情
報が最も多くなり、WWWsrv::Logger::ERROR
はログに出力する情報
が最も少なくなります。省略したときはWWWsrv::Logger::MESSAGE
であるとみなされます。
標準出力に出力するログのレベルを設定します。省略したときは
WWWsrv::Logger::MESSAGE
であるとみなされます。
リクエスト行をログに記録するレベルを設定します。省略したときは
WWWsrv::Logger::MESSAGE
であるとみなされます。
リクエストのヘッダをログに記録するレベルを設定します。省略したとき
はWWWsrv::Logger::DEBUG
であるとみなされます。
リクエストのメッセージボディをログに記録するレベルを設定します。省
略したときはWWWsrv::Logger::INTERNAL
であるとみなされます。
リクエストのトレーラをログに記録するレベルを設定します。省略したと
きはWWWsrv::Logger::DEBUG
であるとみなされます。
レスポンスのステータス行をログに記録するレベルを設定します。省略し
たときはWWWsrv::Logger::SYSTEM
であるとみなされます。
レスポンスのヘッダをログに記録するレベルを設定します。省略すると
WWWsrv::Logger::DEBUG
であるとみなされます。
レスポンスのメッセージボディをログに記録するレベルを設定します。省
略したときはWWWsrv::Logger::INTERNAL
であるとみなされます。
レスポンスのトレーラをログに記録するレベルを設定します。省略したと
きはWWWsrv::Logger::DEBUG
であるとみなされます。
rootユーザで実行したときに使う実行ユーザIDを設定します。実行ユーザ IDは文字列か数値で指定します。省略したときはnobodyであるとみなされ ます。
rootユーザで実行したときに使う実行グループIDを設定します。実行グルー プIDは文字列か数値で指定します。省略したときはnobodyであるとみなさ れます。
タイムアウトを数値で設定します。単位は秒です。省略すると300秒であ るとみなされます。
持続的接続でHTTPのリクエストを待つときのタイムアウトを数値で設定し ます。単位は秒です。省略すると15秒であるとみなされます。
HTTP接続の最大接続数を数値で設定します。省略すると64個であるとみな されます。
HTTPの一回の接続で連続して受け付けるこのできる最大のリクエスト数を 数値で設定します。省略すると64個であるとみなされます。
レスポンスのバッファリングのサイズを数値で設定します。単位はバイト です。省略すると32キロバイトであるとみなされます
真値を設定すると、標準出力にログを出力しなくなります。省略するか偽 値を設定すると、標準出力にログを出力します。
真値を設定すると、デバッグモードで起動します。デバッグモードでは、 ドキュメント内部で例外を捕捉するとエラーレスポンスにバックトースが 表示されます。省略するか偽値を設定すると、デバッグモードでは起動し ません。
エラーページ出力用の警告ドキュメントオブジェクトを設定します。ただ
しデバッグモードで起動したときは、ALERT
の設定如何にかかわら
ず、WWWsrv::DebugAlertDocument
クラスのオブジェクトがつかわれ
ます。省略したときはWWWsrv::AlertDocument
クラスのオブジェク
トをつかいます。
ロギング用のオブジェクトを設定します。ロギング用のオブジェクトは、
WWWsrv::Logger
クラスかまたはその派生クラスのインスタンスです。
プロトコルのスキームを設定します。ここで設定したスキームは、例えば
サーバ上のコンテンツをリダイレクトするために絶対URLを作るときなど
に使います。省略するとhttp
であるとみなされます。
サーバソケットのオブジェクトを設定します。例えばSSL用のソケットを
特別にオープンするときなどに使います。省略するとHOSTNAME
と
PORT
の設定を使って自動的にTCPserver
をオープンして使い
ます。
__SERVER__セクションではSERVER
定数にサーバオブジェクトが入ってい
ます。サーバオブジェクトはWWWsrv::Server
クラスのインスタンスです。
ここではサーバオブジェクトの主なメソッドを説明します。
WWWsrv::Server#scheme
HTTPのスキームを返します。
WWWsrv::Server#scheme=(new_scheme)
HTTPのスキームを設定します。デフォルトは"HTTP"
です。
WWWsrv::Server#timeout
HTTP接続のタイムアウト値を返します。単位は秒です。
WWWsrv::Server#timeout=(new_timeout)
HTTP接続のタイムアウト値を設定します。デフォルトは300秒です。
WWWsrv::Server#keep_alive
HTTPの次の接続を待つときのタイムアウト値を返します。単位は秒です。
WWWsrv::Server#keep_alive=(new_keep_alive)
HTTPの次の接続を待つときのタイムアウト値を設定します。デフォルト は15秒です。
WWWsrv::Server#connections
同時にHTTP接続できる最大数を返します。
WWWsrv::Server#connections=(new_conns)
同時にHTTP接続できる最大数を設定します。デフォルトは64個です。
WWWsrv::Server#max_requests
HTTPの一回の接続で連続して受け付けるこのできる最大のリクエスト数 を返します。
WWWsrv::Server#max_requests=(new_reqs)
HTTPの一回の接続で連続して受け付けるこのできる最大のリクエスト数 を設定します。デフォルトは64個です。
WWWsrv::Server#buffer_size
ネットワークにレスポンスを出力するときに、まとめ書きするサイズを 返します。単位はバイトです。
WWWsrv::Server#buffer_size=(new_size)
ネットワークにレスポンスを出力するときに、まとめ書きするサイズを 設定します。デフォルトは32キロバイトです。
WWWsrv::Server#hostname
サーバのホスト名を返します。
WWWsrv::Server#hostname=(new_name)
サーバのホスト名を設定します。
WWWsrv::Server#port
サーバのポート番号を返します。
WWWsrv::Server#alert
エラーレスポンス用のドキュメントオブジェクトを返します。
WWWsrv::Server#alert=(new_document)
エラーレスポンス用のドキュメントオブジェクトを設定します。デフォ
ルトはWWWsrv::AlertDocument
クラスのオブジェクトが設定され
ています。
WWWsrv::Server#document
通常レスポンス用のドキュメントオブジェクトを返します。
WWWsrv::Server#document=(new_document)
通常レスポンス用のドキュメントオブジェクトを設定します。デフォル
トはWWWsrv::DocumentFolder
クラスのオブジェクトが設定されて
います。
WWWsrv::Server#add_access_control(action, logging=false) { |request| ... }
アクセス制御の設定を追加します。アクセス制御は追加した順番に適用
されます。action引数には:allow
を渡すとアクセスを許可
し、:deny
を渡すとアクセスを拒否します。logging引数に
真値を渡すと、アクセス許可/拒否をログに出力します。
WWWsrv::Server#alias(dst_path, src_path)
サーバ上のパスにsrc_pathの別名dst_pathを定義します。
WWWsrv::Server#mount(document, path, [[:page => page|:mask => mask], :host => host]))
ドキュメントオブジェクトをサーバ上のパスにマウントします。
document引数にはドキュメントオブジェクトを渡します。
path引数にはドキュメントオブジェクトをマウントするサーバ上
のパスを文字列で渡します。page引数、mask引数、
host引数はオプションです。page引数とmask引数
は同時には設定できません。page引数に文字列を渡すとドキュ
メントオブジェクトはpathとpageを合わせたパス
(path + "/" + page
)だけからアクセスできるようになります。
page引数を渡さなければ、ドキュメントオブジェクトは
pathより深い任意のパスからアクセスできます。mask引数
に正規表現を渡すと、ドキュメントオブジェクトはpathより深
くて正規表現に一致するパスだけからアクセスできるようになります。
host引数は仮想ホスト名を文字列で渡します。page、
maskを変えることで、同一のpath上に複数のドキュメン
トオブジェクトをマウントすることができます。
WWWsrv::Server#attach(path, [[:page => page|:mask => mask], :target => target, :host => host]) { |document| ... }
ブロックが返すドキュメントオブジェクトをサーバ上のパスにマウント
します。このメソッドはSSIのように他のドキュメントオブジェクトの
フィルターとして動作するドキュメントオブジェクトを、ブロックで初
期化してマウントするために使います。path引数にはドキュメン
トオブジェクトをマウントするサーバ上のパスを文字列で渡します。
page引数、mask引数、host引数の意味は
WWWsrv::Server#mount
メソッドと同じです。target引数に
はドキュメントオブジェクトを捜すための仮のパスを文字列で渡します。
target引数が渡されると、pathにtargetを追加し
てからドキュメントを捜します。target引数はpath上に
pageやmaskの異なる複数のドキュメントオブジェクトが
マウントされているとき、どのドキュメントオブジェクトをブロックに
渡すのかを決めるために使います。ブロックにはサーバ上のpath
にマウントされているドキュメントオブジェクトが渡されます。このた
めWWWsrv::Server#attach
メソッドを呼ぶより先にサーバ上の
pathにドキュメントオブジェクトがマウントされてないとエラー
になります。
wwwsrvのコンテンツはサーバオブジェクトにマウントする様々なドキュメント オブジェクトとして提供されます。ここでは設定ファイルで使えるドキュメン トについて説明します。
このファイルはwwwsrv本体の一部です。wwwsrvを起動すると自動的に
require
されるので、設定ファイルの中で明示的にrequire
する必
要はありません。
WWWsrv::Document
クラスWWWsrv::Document
クラスはサーバにマウントする全てのドキュメントの
基底クラスになります。
WWWsrv::Document#warm_up(log)
ドキュメントの前処理を行うメソッドです。サーバの起動時に呼ばれま
す。logにはwwwsrv/logger.rbで定義される
WWWsrv::Logger
クラスのオブジェクトが渡されます。
WWWsrv::Document#cool_down(log)
ドキュメントの後処理を行うメソッドです。サーバの終了時に呼ばれま
す。logにはwwwsrv/logger.rbで定義される
WWWsrv::Logger
クラスのオブジェクトが渡されます。
WWWsrv::Document#respond(srv_opt, prefix, request, response) { |arg, opts| ... }
HTTPのレスポンスを作成するメソッドです。作成したレスポンスはブロッ
クに渡します。WWWsrv::Document
クラスの全ての派生クラスはこ
のメソッドを上書きして各ドキュメント固有のレスポンスを作成します。
引数の説明は次のとおりです。
wwwsrv/srvopt.rbで定義される
WWWsrv::ServerOption
クラスのオブジェクトが渡されます。
このオブジェクトはサーバの情報を管理しています。
ドキュメントがマウントされているパスが文字列として渡されま す。
wwwsrv/request.rbで定義されるWWWsrv::Request
ク
ラスのオブジェクトが渡されます。このオブジェクトはHTTPリク
エストの情報を管理しています。
wwwsrv/response.rbで定義されるWWWsrv::Response
クラスのオブジェクトが渡されます。このオブジェクトはHTTPレ
スポンスの情報を管理していて、ドキュメントが返すレスポンス
の雛型になります。
メソッドの中からブロックを複数回呼ぶことでHTTPレスポンスを作成し ます。レスポンス作成の流れは次のようになります。
response.trailer
にTrailerを設定しま
す。これもほとんどのアプリケーションでは不要でしょう。http_error
メソッドにHTTPのステータスコードを渡して呼
び出し、レスポンスの作成をキャンセルします。
http_error
メソッドはWWWsrv::HTTPerror
モジュー
ルのモジュール関数です。WWWsrv::Document
クラスは
WWWsrv::HTTPerror
モジュールをinclude
しています。WWWsrv::Document#folder?
このメソッドがtrue
を返すと、サーバはドキュメントがマウント
されているパスをディレクトリとして扱います。デフォルトでは
false
を返します。
WWWsrv::Document#internal_documents
ドキュメントが内部に子ドキュメントを含んでいるとき、子ドキュメン トのリストを返します。このメソッドはサーバにマウントされている全 てのドキュメントを巡回するために使うので、派生クラスが子ドキュメ ントを持つときは正しく再定義しなければなりません。
WWWsrv::DocumentFolder
クラス複数のドキュメントを束ねるフォルダーを定義します。サーバオブジェクトの
mount
メソッドとattach
メソッドの実体は、このクラスで定義さ
れています。
WWWsrv::DocumentFolder#mount(document, path, [[:page => page|:mask => mask], :host => host]))
WWWsrv::Server#mountメソッドの実体です。
WWWsrv::DocumentFolder#attach(path, [[:page => page|:mask => mask], :target => target, :host => host]) { |document| ... }
WWWsrv::Server#attachメソッドの実体です。
WWWsrv::DocumentDispatcher
クラスリクエストを与えられた条件に従って複数のドキュメントへ振り分けます。
WWWsrv::DocumentDispatcher.new(default_document=nil)
条件分岐用のドキュメントを作成します。default_documentはリ クエストが条件に一致しないときに振り分けられるドキュメントです。 リクエストが条件に一致せずかつdefault_documentも無い場合は、 404 Not Foundレスポンスを返します。
WWWsrv::DocumentDispatcher#add_cond(document, *vary_field_names) { |srv_opt, prefix, request| ... }
リクエストを振り分けるドキュメントとその条件を追加します。 ブロックは必須で、リクエストを振り分ける条件として使われます。リ クエストに対してブロックが評価され、ブロックが真を返すと登録され たdocumentドキュメントがレスポンスを返すのに使われます。 vary_field_namesにはリクエストの条件判断で使用するヘッダ フィールド名を与えます。vary_field_namesに与えたヘッダフィー ルド名は、レスポンスのVaryヘッダフィールドの値に使われます。 ブロックの引数の意味はWWWsrv::Document#respondメソッドの引 数と同じです。
WWWsrv::Page
クラス固定された文字列をレスポンスの内容として返します。
WWWsrv::Page.new(message, type='text/html', mtime=nil, add_content_md5=false)
messageの文字列をレスポンスの内容として返すドキュメントオ ブジェクトを作成します。オプション引数の説明は次のとおりです。
レスポンスのContent-Typeヘッダフィールドに設定す値
を文字列で渡します。省略すると"text/html"
になります。
レスポンスのLast-Modifiedヘッダフィールドに設定する
時刻をTime
オブジェクトで渡します。省略するとレスポン
スヘッダからLast-Modifiedヘッダフィールドが無くなり
ます。
true
を設定するとmessageのMD5ハッシュ値を計算し
て、レスポンスのヘッダにContent-MD5ヘッダフィールド
を追加します。
WWWsrv::Page#content_md5
このメソッドがtrue
を返すとき、ドキュメントはレスポンスのヘッ
ダにContent-MD5ヘッダフィールドを追加します。
WWWsrv::Page#content_md5=(boolean)
booleanに真値を渡すとドキュメントはレスポンスのヘッダに Content-MD5ヘッダフィールドを追加するようになり、 booleanに偽値を渡すとContent-MD5ヘッダフィールドを追 加しなくなります。
WWWsrv::Redirect
クラスLocationヘッダでリクエストを別のURLへリダイレクトします。
WWWsrv::Redirect.new(status=301, page=REDIRECT_PAGE) { |srv_opt, prefix, request| ... }
リクエストをブロックが返すURLへリダイレクトするドキュメントオブ ジェクトを作成します。ブロックはリクエスト毎に評価され、リダイレ クト先のURLを文字列で返さなければなりません。オプション引数の説 明は次のとおりです。
リダイレクトレスポンスのステータスコードを数値で渡します。
省略すると301
になります。
リダイレクトレスポンスのメッセージを返すドキュメントオブジェ クトを渡します。
ブロックの引数の意味はWWWsrv::Document#respondメソッドの引 数と同じです。
WWWsrv::DocumentModifier
クラス別のドキュメントオブジェクトの入出力を書き変えるフィルター型ドキュメン
トの雛型になるクラスです。WWWsrv::DocumentModifier
クラスは
wwwsrv/delegate.rbで定義されるWWWsrv::Delegatable
モジュー
ルをinclude
しているので、WWWsrv::DocumentModifier
クラスに
無いメソッドの呼び出しはフィルター対象のドキュメントオブジェクトに委譲
されます。
WWWsrv::DocumentModifier
クラスの派生クラスでは複数のメソッドを上
書きすることで動作を変更します。WWWsrv::DocumentModifier
クラスは
一回のHTTPリクエストにつき、次の一連のメソッドを呼び出します。
各メソッドでyield
を呼ぶことで、WWWsrv::Document#respondメ
ソッドと同様にレスポンスを作成することができます。デフォルトでは子ドキュ
メントのレスポンスをそのまま返すように定義されています。各メソッドには
contextという引数にHash
オブジェクトが渡されます。
contextハッシュはリクエスト毎に固有に作られるので、メソッド間で
情報をやりとりするために使うことができます。また
WWWsrv::DocumentModifier#terminateメソッドを呼ぶことでリクエスト
の処理を中断することができます。リクエストを中断するとそれ以降、リクエ
ストを処理するためのメソッドは呼ばれなくなりますが、
WWWsrv::DocumentModifier#rear_guardメソッドだけは後処理のために
必ず呼ばれます。
WWWsrv::DocumentModifier.new(document)
document
の入出力を書き変えるフィルター型ドキュメントを作成
します。document
はフィルター型ドキュメントの子ドキュメント
になります。
WWWsrv::DocumentModifier#document
フィルター対象の子ドキュメントを返します。
WWWsrv::DocumentModifier#front_guard(srv_opt, context)
リクエストを処理する準備をおこなうメソッドです。
WWWsrv::DocumentModifier#modify_request(srv_opt, context, prefix, request, response) { |arg, opts| ... }
リクエストを子ドキュメントに渡す前に呼ばれるメソッドです。このメ
ソッドの中でyield
を呼ぶことでレスポンスを作成できます。
WWWsrv::DocumentModifier#modify_response(srv_opt, context, prefix, request, response) { |arg, opts| ... }
子ドキュメントがレスポンスを返すと呼ばれるメソッドです。このメソッ
ドの中でyield
を呼ぶことでレスポンスを作成できます。
WWWsrv::DocumentModifier#modify_message_body(srv_opt, context, body_fragment, opts=nil) { |arg, opts| ... }
子ドキュメントがレスポンスの内容を返すと呼ばれるメソッドです。こ
のメソッドの中でyield
を呼ぶことでレスポンスを作成できます。
WWWsrv::DocumentModifier#modify_terminal(srv_opt, context) { |arg, opts| ... }
子ドキュメントのレスポンスが終了すると呼ばれるメソッドです。この
メソッドの中でyield
を呼ぶことでレスポンスを作成できます。
WWWsrv::DocumentModifier#rear_guard(srv_opt, context)
リクエストの最後に必ず呼ばれるメソッドです。リクエストの後処理を ここに記述します。
WWWsrv::DocumentModifier#terminate
このメソッドを呼ぶとリクエストの処理を中断します。プライベートメ ソッドです。
ローカルのファイルやディレクトリをウェブ上に公開します。
WWWsrv::LocalFileDocument
クラスCGIスクリプトを使えるようにします。
WWWsrv::CGIdocument
クラスSSIを使えるようにします。
WWWsrv::SSIdocument
クラスBasic認証を使えるようにします。
WWWsrv::BasicAuthentication
クラスeRuby文書を使えるようにします。
WWWsrv::ERubyDocument
クラスWWWsrv::ERubyFilterDocument
クラスコンテンツを書換えられるようにします。
WWWsrv::LineFilterDocument
クラスFastCGIを使えるようにします。
WWWsrv::FastCGIResponder
クラスWWWsrv::FastCGIAuthorizer
クラスWWWsrv::FastCGIFilter
クラスXML-RPCを使えるようにします。
WWWsrv::XMLRPCServer
クラスHTTPリクエストの内容を表示します。このドキュメントは一番最初にデバッグ 用に作られました。
WWWsrv::Echo
クラス