ウェブリック

ウェブリック
原作者高橋正義、後藤祐三、他[1] [2]
開発者Rubyコミュニティ
安定版リリース
1.9.1 [3] / 2024年12月2日; 11か月前 (2024年12月2日
リポジトリ
  • github.com/ruby/webrick
書かれたルビー
オペレーティング·システムクロスプラットフォーム
入手可能なルビー
タイプウェブサーバー
ライセンス2条項BSDライセンス
Webサイトwww.ruby-lang.org/en/

WEBrickは、シンプルなHTTPウェブサーバーを提供するRubyライブラリです。HTTPベースサーバー、HTTPSサーバー、プロキシサーバー、仮想ホストサーバーなど、様々な種類のサーバーを構築でき、基本アクセス認証ダイジェストアクセス認証を使用します。[4] HTTPではなくDaytimeプロトコルを使用するDay Time Serverなど、HTTP以外のサーバーの構築もWEBrickによって容易になります。Ruby on RailsPadrinoフレームワークでは、開発環境だけでなく、負荷の少ない本番環境でもアプリケーションをテストするためにWEBrickが使用されています。現在、Rubyの標準ライブラリの一部となっています。[1]

WEBrick はオープンソース配布モデルに従います。

歴史

WEBrickは、日本のエンジニアリング雑誌『Open Design』に掲載された「Rubyによるインターネットプログラミング」という記事のアイデアから生まれました。当初は、Rubyを用いたHTTPサーバー開発用のツールキットとして開発されました。オープンソースモデルの性質と世界中の多くのRuby開発者からの貢献により、WEBrickは大幅に拡張され、最終的にRuby 1.8.0から標準ライブラリとしてバンドルされました。[2] WEBrick ERBハンドラとWEBrickプロキシサーバはRuby 1.9.3で初めて導入され、WEBrickバーチャルホストはRuby 2.0.0から搭載されました。

使用法

WEBrickサーバーはサーブレット言語のみを理解します。プログラマーによって結合された複数の独立したサーブレットを用いて、CGIスクリプト、ERBページRubyブロック、ディレクトリリストを処理し、Webアプリケーションを提供したり、ホストごとまたはパスごとにリクエストURIにサービスを提供したりします。例えば、HTTPServlet::FileHandler、 [2] [1]、[2] HTTPServlet::CGIHandler、[2] HTTPServlet::ERBHandler [2]は、WEBrickに付属する標準サーブレットの例です。

WEBrickはRubyに組み込まれているため、ユーザーは追加費用なしで利用できます。WEBrickは完全にRubyで記述されており、HTTP、HTML、さらにはRHTMLといった様々な標準規格をサポートしています。開発段階では、WEBrickがRailsフレームワークに既に組み込まれているため、別途Webサーバーをインストールする必要はありません。RubyアプリケーションをRailsにprocfileなしでデプロイする場合、WEBrickがデフォルトのWebサーバーとして機能します。さらに、WEBrickは完全にRubyで実装されているため、Railsアプリケーションを直接呼び出すことができます。全体として、WEBrickは開発中のテストにおいて、信頼性が高く、設定の手間が少ない選択肢を提供します。

サーバーのインスタンス化

HTTPサーバーのインスタンス化

次のコマンドは、必要なポートでHTTPサーバーを起動するために使用されます。[1]

# WEBrick クラスを require でインクルードします。
require 'webrick' 

# FileHandler サーブレットは、ユーザーからどのファイルを提供するかを選択するオプションを提供します
# 次のコードは、フォルダー 'myapp' からそれらを提供する方法を示しています
root = File . expand_path '/var/myapp/'   


# HTTPServer.new を使用して、ポート 1234 で新しいサーバーをインスタンス化し、ルートフォルダーからドキュメントを提供します。server = WEBrick :: HTTPServer . new :Port => 1234 , :DocumentRoot => root        


# 次のプロシージャはサーバー操作をカスタマイズするために使用されます。server.mount_proc ' / ' do | request , response | response.body = 'Hello, world!' end    
    


# 次のコマンドは、サーバーをシャットダウンするためのフックを提供します(通常はCtrl+Cで実行されます)
trap ( 'INT' ) { server . shutdown } 

# サーバーを起動
ますserver.start

サーブレットをマウントすると、プロシージャに比べて高度なカスタム動作を提供でき、[5]モジュール性が向上します

仮想ホストの起動

WEBrickはリスニングポートを作成します。同時に、以下に示すように、リスニングを行わない他の様々なポートを「仮想ホスト」として作成することもできます。[1]

# listen しない仮想ホストの作成
vhost = WEBrick :: HTTPServer . new :ServerName => 'vhost.example' , :DoNotListen => true , # ...     
                                   

# 上記で作成した仮想ホストを、HTTP サーバーをマウントしたのと同様の方法でマウントします
。vhost . mount '/' ...  

# このホストは、リスニングサーバーホストにマウントされると、仮想ホストサーバーとして機能
ます。virtual_host vhost 

:DocumentRoot を提供するか、リクエストURIに対応するためにサーブレットのインスタンスを設定する必要があります。そうでない場合は404 エラーが返されます。

HTTPSサーバーのインスタンス化

SSLを有効にしてSSL証明書名を指定するだけで、サーバーの再起動ごとに変更される自己署名証明書を使用してHTTPSサーバーを起動できます。 [1]

# SSL 機能のために、webrick に加えて webrick/https も必要になります
require 'webrick' require 'webrick/https' 
 

# 証明書名を指定します。ただし、これは自己生成の自己署名証明書になります。cert_name 
= [ % w[CN localhost] , ]  

# SSL を有効にして証明書名を指定すると、HTTPS サーバーがインスタンス化されます。server 
= WEBrick :: HTTPServer . new ( : Port => 1234 :SSLEnable => true :SSLCertName => cert_name )    
                                   
                                   

ただし、以下に示すように、HTTPS サーバーをインスタンス化するために、事前に決定されたキーと証明書を提供することもできます。

# 上記の2つに加えて、SSL証明書とキーを読み込むためにopensslが必要になり
ます 

# 保存した証明書とその署名キーをローカルディレクトリから読み取ります
。cert = OpenSSL :: X509 :: Certificate.newFile.read ' / var/myapp / cert.pem'pkey = OpenSSL :: PKey :: RSA.newFile.read ' / var / myapp / pkey.pem '    
    


# HTTPServer.newでインスタンス化するときに、証明書とキーを別々のパラメータとして渡します。server = WEBrick :: HTTPServer . new ( :Port => 1234 :SSLEnable => true :SSLCertificate => cert :SSLPrivateKey => pkey )    
                                   
                                   
                                   

プロキシサーバーの起動

WEBrickはGET、HEAD、POSTリクエストをプロキシすることもできます: [1]

# プロキシサーバーのインスタンス化も同様ですが、HTTPProxyServer サーブレットによって処理されます。
require 'webrick/httpproxy' proxy = WEBrick :: HTTPProxyServer . new :Port => 1234 
     

# 現在のスレッドからフックアウトを提供する
trap ' INT' do proxy .shutdown end    

制限事項

本番環境で使用されているほとんどのサーバーとは異なり、WEBrickはデフォルトでシングルスレッドのWebサーバーであるため、スケーラブルではありません。[6]そのため、複数のリクエストを同時に処理することはできず、後続のリクエストは前のリクエストがすべて処理されるまで待機する必要があり、大きな遅延が発生します。そのため、開発者はRailsアプリケーションのデプロイには、LighttpdMongrelなどの本格的なマルチスレッドWebサーバーを好みます[7]

参照

参考文献

  1. ^ abcdef "Module: WEBrick (Ruby 2.7.0)". ruby​​-doc.org . 2016年9月22日閲覧
  2. ^ abcdef GnomeのWEBrickガイド
  3. ^ “リリース 1.9.1”. 2024年12月2日. 2024年12月29日閲覧
  4. ^ WebサーバーのWebアプリケーションのエネルギー使用量への影響の調査 - IEEE
  5. ^ プロセス
  6. ^ Heroku Ruby デフォルト Web サーバー
  7. ^ NetBeans Ruby and Rails IDE with JRuby (FirstPress) Chris Kutler、Brian Leonard著
  • Gnome の WEBrick ガイド
  • Ruby標準ライブラリドキュメント - WEBrick
  • WEBrick 高性能
「https://en.wikipedia.org/w/index.php?title=WEBrick&oldid=1287763232」から取得