Hiawatha

提供: ArchWiki
ナビゲーションに移動 検索に移動

Hiawatha はセキュリティ・使いやすさ・軽量の3つが特徴のオープンソースなウェブサーバーです。(Fast)CGI, IPv6, URL 書き換え,リバースプロキシなどに対応しています。さらに他のウェブサーバーにはない機能として SQL インジェクション, XSS, CSRF あるいは脆弱性攻撃などをブロックします。

インストール

hiawatha パッケージをインストールしてください。

設定

基本設定

Hiawatha の設定ファイルは /etc/hiawatha/hiawatha.conf です。デフォルトでは 404 ページを表示するようになっています。

デフォルトの設定ファイルではドキュメントディレクトリとして /srv/http/my-domain/public が使われます。インストールが問題ないかテストするために、ダミーファイルを作成してください:

/srv/http/my-domain/public/index.html
Hello world!

設定ファイルの VIRTUAL HOSTS セクションを適宜修正してください。

そして hiawatha.service起動有効化してからブラウザで my-domain を開いてみてください。テストページが表示されるはずです。

設定ファイルのサンプルは /etc/hiawatha/hiawatha.conf.sample にあります。

詳しくは公式の HowTo を参照。

CGI

Hiawatha では Common Gateway Interface (CGI) スクリプトをすぐに動作させることができます。CGI モジュールを有効化するだけです:

/etc/hiawatha/hiawatha.conf
VirtualHost {
    ...
    ExecuteCGI = yes
}

使用するプログラミング言語のインタプリタがインストールされていることを確認してください (python であれば python をインストールします)。

詳しくは公式の HowTo を参照。

FastCGI

fcgi をインストールしてください。それで Hiawatha は fcgi を使うことができます。

ノート: FastCGI アプリケーションには種類が2つあります:
  • デーモンとして実行され、ポートを開いてウェブサーバーからの接続を待機するアプリケーション。
  • ウェブサーバーによって実行され、パイプを使ってウェブサーバーと通信するアプリケーション。
Hiawatha がサポートしているのは前者のアプリケーションだけです。

PHP

php, php-cgi, php-fpm をインストールしてください (PHPLAMP を参照)。そして php-fpm.service起動有効化します。

php-cgi が動作していることを確認: php-cgi --version

PHP 7.0.2 (cgi-fcgi) (built: Jan  6 2016 11:51:03)
Copyright (c) 1997-2015 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2015 Zend Technologies

上記のような表示がされれば、問題なく php はインストールされています。

設定ファイルの FastCGIserver セクションに以下を追加してください:

/etc/hiawatha/hiawatha.conf
### The following fast CGI daemon requires php-fpm using a UNIX socket and TCP port, respectively.
# ACTIVATE a FastCGI server for php  (using UNIX socket)
FastCGIserver {
    FastCGIid = PHP7
    ConnectTo = /run/php-fpm/php-fpm.sock
    Extension = php
    SessionTimeout = 30
}
/etc/hiawatha/hiawatha.conf
### The following fast CGI daemon requires php-fpm using a UNIX socket and TCP port, respectively.
# ACTIVATE a FastCGI server for php (using IP-address and TCP port)
FastCGIserver {
    FastCGIid = PHP5
    ConnectTo = 127.0.0.1:9000
    Extension = php
    SessionTimeout = 30
}

FastCGIserver を使うには、設定ファイルに以下を追加:

/etc/hiawatha/hiawatha.conf
VirtualHost {
    ...
    UseFastCGI = PHP7
}

それから hiawatha.serviceリロードしてください。

Ruby on Rails

HowTo の FastCGI セクションを参照。

Python FastCGI

HowTo の FastCGI セクションを参照。

リバースプロキシ

以下は https://service.domain.net のリクエストを 8181 ポートで動作しているウェブサービスに転送するリバースプロキシ設定の例です:

/etc/hiawatha/hiawatha.conf
VirtualHost {
    Hostname = service.domain.net
    WebsiteRoot = /var/www/domain
    StartFile = index.html
    ReverseProxy .* http://127.0.0.1:8181/
    RequireTLS = yes
}

SSL

SSL/TLS を使用するには設定ファイルに以下の Binding を追加して hiawatha.serviceリロードしてください。

/etc/hiawatha/hiawatha.conf
Binding {
    Port = 443
    TLScertFile = /etc/hiawatha/serverkey.pem
}

serverkey.pem のアイテムの順番は重要です。順番は以下のようにしなければなりません:

serverkey.pem
-----BEGIN RSA PRIVATE KEY-----
[webserver private key]
-----END RSA PRIVATE KEY----- 

-----BEGIN CERTIFICATE-----
[webserver certificate]
-----END CERTIFICATE-----

-----BEGIN CERTIFICATE-----
[optional intermediate CA certificate]
-----END CERTIFICATE-----

詳しくは公式の HowTo を参照。

Let's Encrypt

Hiawatha で Let's Encrypt を使いたい場合は Let’s Encrypt の記事に書いてある手順に従ってください。その後、Hiawatha の証明書バンドルを作成します:

# cd /etc/letsencrypt/live/domain.tld/
# cat privkey.pem cert.pem chain.pem > /etc/hiawatha/certs/domain.tld/hiawatha.pem

他のユーザーから見れないようにパーミッションを設定:

# chmod 400 /etc/hiawatha/certs/domain.tld/hiawatha.pem

hiawatha.conf の TLScertFile のパスを変更:

Binding {                                                      
    ...                                                         
    RequireTLS = yes                                           
    TLScertFile = /etc/hiawatha/certs/domain.tld/hiawatha.pem 
    ...                                                         
}                                                              
                                                               
VirtualHost {                                                  
    ...                                                        
    RequireTLS = yes                                           
    TLScertFile = /etc/hiawatha/certs/domain.tld/hiawatha.pem
    ...                                                        
}                                                              

設定できたら Hiawatha を再起動してください。

詳しくは こちらのフォーラム投稿 を参照。

Server Name Indication

Hiawatha は SNI をサポートしており、一つの IP アドレスで複数の TLS ウェブサイトを公開することができます。上記のように TLS バインディングを設定してください。SSL/TLS 証明書があるバーチャルホストごとに、バーチャルホストのブロックの中で TLScertFile オプションを記述します。バーチャルホストが定義されていないウェブサイトがリクエストされたときは、Binding{} で指定した証明書が使われます。

/etc/hiawatha/hiawatha.conf
VirtualHost {
    Hostname = www.website.org
    ...
    TLScertFile = website.pem
}

出力の圧縮

Hiawatha は gzip によるコンテンツのエンコードに対応していませんが、あらかじめ zip で圧縮しておく方法が存在します。

詳しくは公式の FAQ を参照。

参照