皆さんはWebサーバーといえば何を思い浮かべますか。Apache・Nginx・IISなどの有名なWebサーバーの名前が出てくると思います。

ではその仲間にlighttpdも混ぜて頂けないでしょうか。

本記事はlighttpdの特徴・機能から設定方法、基本操作に至るまで細かく解説を行うものです。

またNginxとの比較を行いながら、lighttpdの持つ特性について見ていきましょう。


lighttpdとは

lighttpd(ライトティーピィーディー)はlightとhttpdの混成語で、lighty(ライティ)という別名もあります。

BSDライセンスに基づいて公開されているオープンソースのWebサーバーミドルウェアです。

事項から詳しく見ていきます。


lighttpdの特徴・機能

lighttpdの特徴や機能について見ていきましょう。


CGI・FastCGIのサポート

FastCGIはWebサーバ上でプログラムを動作させる際、初回起動時のプロセスを保持し、次回以降のプログラム実行を高速化させる方式です。

プロセスの起動・終了回数そのものが減るため、CPU負荷の軽減にも繋がります。

lighttpdはCGI・FastCGIなどのインタフェースをサポートしており、Webアプリケーションサーバーとしても利用が可能です。

PHP・Python・Rubyなどの流行りのプログラミング言語も動きます。

サーバーの過負荷を防ぐ設計のため、安全・安定した運用ができるでしょう。


Webサーバーの基本的な機能

マイナーなシステムやライブラリにありがちな弱点として、必要な機能や欲しい機能が実装されていないというものがあります。

しかしご安心下さい。lighttpdには最低限の機能は一通り揃っています。

  • URLリライト・HTTPリダイレクト
  • SSL/TLS通信
  • モジュール機構による拡張
  • バーチャルホスト設定
  • 圧縮転送
  • Basic認証・Digest認証
  • WebDAVサポート


lighttpdの用途

lighttpdの特徴を活かして大規模なWebサイトのサーバー基盤に採用されることが多いようです。

公式ドキュメントには毎日数百万のページビューを提供しているWebサービスのリストが載っています。


容量の大きい静的コンテンツの配信

画像や動画など比較的容量が大きい静的コンテンツの配信です。

オーストリアにあるインターネットサービスプロバイダのオープンソースミラーとして使用されています。

「mirror.inode.at」はCentOS・Debian・Fedoraなどのイメージファイルのミラーサーバーです。


Webホスティングプロバイダ

イギリスやオランダなどヨーロッパの国々を中心にWebホスティングプロバイダの構築に用いられています。

またアメリカにはFreeBSDとlighttpdを利用した画像ホスティングプラットフォームなどもあるそうです。


トラフィックの多いサービス

1日のトラフィックが多いシステムの構築に用いられます。

ユーザー数が25万人を超えるドイツ語の巨大なコミュニティサイト「Gesichterparty.de」はUbuntu・lighttpd製です。

またチェコのブログホスティングサービス「Webgarden」では、1日平均350リクエスト/秒を捌いています。


lighttpdのインストール

今回はCentOS8にてインストール手順を説明しましょう。以下の検証環境にて動作確認を行いました。

  1. $ cat /etc/redhat-release
  2. CentOS Linux release 8.1.1911 (Core)


EPELリポジトリの追加

EPEL(Extra Packages for Enterprise Linux)はエンタープライズLinux用の拡張パッケージです。

lighttpdを使用するにはEPELリポジトリを追加する必要があります。既に追加してあるという方は飛ばして下さい。

  1. $ yum -y install epel-release
  2. $ yum -y update


lighttpdのインストール

YUMを使用してlighttpdをインストールします。

  1. $ yum -y install lighttpd

インストール完了後、以下のコマンドでバージョンの確認を行って下さい。

  1. $ lighttpd -v
  2. lighttpd/1.4.55 (ssl) – a light and fast webserver


lighttpdの設定方法

lighttpdの設定項目について見ていきましょう。


サービス自動起動

システムブート時にサービスが自動で立ち上がるよう設定します。

  1. $ systemctl start lighttpd
  2. $ systemctl enable lighttpd
  3. Created symlink /etc/systemd/system/multi-user.target.wants/lighttpd.service → /usr/lib/systemd/system/lighttpd.service.

この設定は必要であれば無効にしても構いません。

  1. $ systemctl disable lighttpd
  2. Removed /etc/systemd/system/multi-user.target.wants/lighttpd.service.

サービス自動起動の状態確認は以下のコマンドでできます。

  1. $ systemctl is-enabled lighttpd
  2. enabled


ファイヤーウォールの調整

firewalldがインストールされている場合、新しいルールを追加してアクセスを許可する必要があるでしょう。

  1. $ firewall-cmd –permanent –zone=public –add-service=http
  2. success
  3. $ firewall-cmd –permanent –zone=public –add-service=https
  4. success
  5. $ firewall-cmd –reload
  6. success

既に設定済であれば対応は不要です。


lighttpd設定ファイル

lighttpdの設定ファイルは「/etc/lighttpd/lighttpd.conf」にあります。

このファイルの内容を覗いてみましょう。IPアドレスのみ編集が必要かもしれませんのでご注意下さい。


IPアドレス・ポート番号指定

デフォルトではコメントアウトされている行で、そのまま起動した場合はPCのIPアドレスを調べてアクセスする必要があります。

  1. #server.bind = “localhost”

もしDockerやVagrantなどの仮想環境で起動している場合は、「server.bind = “0.0.0.0”」を指定して下さい。

以下でアクセス先のポート番号の指定を行います。他のサービスが既に80番ポートを使用している場合などに変更して下さい。

  1. server.port = 80


変数定義・各種ディレクトリ設定

lighttpdの設定ファイルには変数を指定することができます。

ファイル先頭にいくつかの基本的な変数が定義されているので見てみましょう。

  1. ## Some Variable definition which will make chrooting easier.
  2. var.log_root = “/var/log/lighttpd”
  3. var.server_root = “/var/www”
  4. var.state_dir = “/run/lighttpd”
  5. var.home_dir = “/var/lib/lighttpd”
  6. var.conf_dir = “/etc/lighttpd”
  7. (中略)
  8. ## Base directory for all virtual hosts
  9. var.vhosts_dir = server_root + “/vhosts”
  10. (中略)
  11. ## Document root
  12. server.document-root = server_root + “/lighttpd”

デフォルトのバーチャルホストディレクトリは「/var/www/vhosts」です。またドキュメントルートは「/var/www/lighttpd」になります。


モジュール設定

lighttpd.conf中に別の設定ファイルを読み込む記述があるのに気がついたでしょうか。

  1. ## Load the modules.
  2. include “modules.conf”

modules.confの中には以下のような定義が並んでおり、開発者は必要に応じてコメントアウトすれば拡張機能を利用できます。

  1. ##
  2. ## mod_webdav
  3. ##
  4. #include “conf.d/webdav.conf”
  5. (中略)
  6. ##
  7. ## FastCGI (mod_fastcgi)
  8. ##
  9. #include “conf.d/fastcgi.conf”

.php・.plなどの静的ファイルとして転送処理してはいけないファイルは、lighttpd.confに以下のように定義しましょう。

mod_fastcgiまたはmod_cgiによって処理されます。

  1. static-file.exclude-extensions = ( “.php”, “.pl”, “.fcgi”, “.scgi” )


HTML関連の設定

インデックスページや各種エラーページは以下のような設定方法です。

  1. index-file.names += (
  2. “index.xhtml”, “index.html”, “index.htm”, “default.htm”, “index.php”
  3. )
  4. (中略)
  5. ##
  6. ## error-handler for status 404
  7. ##
  8. #server.error-handler-404 = “/error-handler.html”
  9. #server.error-handler-404 = “/error-handler.php”


lighttpdの基本操作

lighttpdの基本的な操作について解説しましょう。


lighttpdの起動・停止

lighttpdサービスの起動と停止は以下のコマンドです。

  1. $ systemctl start lighttpd
  2. $ systemctl stop lighttpd

ちなみにsystemctl reloadコマンドを実行しようとすると、以下のエラーメッセージを出力して失敗します。

  1. $ systemctl reload lighttpd
  2. Failed to reload lighttpd.service: Job type reload is not applicable for unit lighttpd.service.

これは「/usr/lib/systemd/system/lighttpd.service」に「ExecReload=」オプションの指定がないためです。


lighttpdの起動状態確認

起動状態の確認は以下のコマンドで行えます。

  1. $ systemctl status lighttpd
  2. ● lighttpd.service – Lightning Fast Webserver With Light System Requirements
  3. Loaded: loaded (/usr/lib/systemd/system/lighttpd.service; enabled; vendor preset: disabled)
  4. Active: active (running) since Mon 2020-04-20 22:34:12 UTC; 16min ago
  5. (後略)

緑色の●と「Active: active (running)」の表示であれば、起動している状態です。


ブラウザ上から確認する

サービスを起動して設定ファイルに指定したIPにアクセスすると、lighttpdのトップ画面が表示されます。

加えてHTTPヘッダーの情報を確認してみることにしましょう。

Google ChromeでF12キーでデベロッパーツールを開いて、画面をリロードして下さい。

NetworkタブのNameリストからlocalhostを選択し、右側のResponse Headersを確認してみましょう。

Server: lighttpd/x.x.x」という表記が確認できる筈です。

他の一般的なWebサイトと比較してみて下さい。

「Server: AmazonS3」「Server: nginx/1.10.2」など様々なWebサーバーが確認できるでしょう。

同じlighttpdのサーバーだと「mirror.inode.at」が分かりやすいと思います。


Nginxとは

NginxはオープンソースのWebサーバーミドルウェアです。BSDライクライセンスで公開されています。

Nginxは複数同時リクエストを処理するのに向いており、高負荷に耐えうる堅牢性が特徴の1つです。

並行処理・負荷分散・リバースプロキシ・ロードバランサーなどの便利な機能も有しています。

数多の有名サイトで導入事例を確認することができるでしょう。

例えばAdobeのAPIゲートウェイの強化・WordPress.comのロードバランシングやスケーラビリティなどに利用されています。


lighttpdとNginxの違い

lighttpdもNginxも軽量・高速・メモリ消費軽減などの類似性がありました。

どちらもオープンソースのWebサーバーであり、ライセンスもBSD周りと一見同じWebサーバーに見えてしまいそうです。

技術的な違いはlighttpdが単一のプロセスとして動作するのに対し、Nginxがマスタープロセスとして機能する点くらいでしょうか。

他にも細かな違いはありますが、あえて取り上げるほどの大きな違いではありません。

別の視点から比較を行いましょう。

lighttpdの情報はNginxよりも圧倒的に少なく稀です。これは日本語だけでなく英語も同様で、求める解決法を検索するのは困難でしょう。

また開発状況やコミュニティ活動もNginxの方がより活発です。数週間ごとにバグ修正や機能追加のリリースが行われます。

仕事でどちらを選ぶか聞かれたら、残念ながらNginxになってしまうでしょう。


おわりに

lighttpdのシェアはApacheやNginxなどと比べると雀の涙ほどです。案件に巡り会えるのは奇跡的な確率かもしれません。

Zope・thttpd・Hiawathaなど名前も聞いたことがないようなWebサーバーは色々あります。

名前と簡単な概要だけでも知っておくと、程よい話の種になるのではないでしょうか。