WWW と Apache
WWWの基本概念とApache Webサーバの導入・設定方法を解説する.Apacheは広く普及しているWebサーバソフトウェアであり,UbuntuなどのLinuxディストリビューションではパッケージマネージャによる導入が容易である.apache2.confによる設定,MPM(マルチプロセッシングモジュール:リクエストを処理する方式を決める仕組み)の選択,ディレクトリごとのアクセス制御,SSL/TLSによる暗号化通信(HTTPS)など,Webサーバ運用に必要な知識を習得できる.
前提知識:Linuxの基本操作(コマンドライン,ファイル編集),ネットワークの基礎(IPアドレス,ポート番号)
【目次】
WWW
WWWとは
WWW(World Wide Web)は,インターネット上で広く利用されている情報システムである.ハイパーテキストと画像,音声,動画などを組み合わせて情報を提供でき,この規格に基づいて情報を提供するサーバをWWWサーバ(Webサーバ)と呼ぶ.
ハイパーテキストの特徴は,文書中の特定箇所をクリックするだけで関連する詳細情報へ移動できる点にある.このリンクが世界中に網の目のように張りめぐらされている.画像,音声,動画など文字以外のメディアともリンクできるものをハイパーメディアと呼ぶ.
Webという名称は,リンクが世界中にクモの巣(web)状に広がるイメージに由来する.世界各地の情報へクリックだけでアクセスできる様子を,ネットサーフィン(net surfing)と表現することもある.
Apache
Apacheは,世界中で広く使用されているオープンソースのWebサーバソフトウェアである.公式サイト(http://www.apache.org)からソースコードまたはバイナリを入手できるが,Linuxディストリビューションではパッケージマネージャからの導入が一般的である.
インストール
パッケージマネージャを使用すると,依存関係の解決や初期設定が自動的に行われるため,手動でのインストールより簡便かつ確実である.Ubuntu 24.04 LTSでは以下のコマンドでインストールできる.
# apt update
# apt install apache2
インストール完了後,systemd(Linuxのサービス管理システム)によりApacheが自動的に起動する.手動で制御する場合は以下のコマンドを使用する.
# systemctl start apache2 # 起動
# systemctl stop apache2 # 停止
# systemctl restart apache2 # 再起動
# systemctl status apache2 # 状態確認
Webブラウザで http://localhost にアクセスし,Apacheのデフォルトページが表示されればインストール成功である.
設定ファイル
Apacheの設定ファイルは/etc/apache2に配置されている.主な設定ファイルは以下の4つである.
- apache2.conf:メインの設定ファイル
- envvars:環境変数の定義
- ports.conf:待ち受けポートの設定
- mods-available/mods-enabled:モジュールの設定と有効化
Ubuntuのapache2では,設定を機能ごとのファイルに分け,apache2.confからそれらを読み込む構成になっている.サイトごとの設定はsites-available/sites-enabled,モジュールごとの設定はmods-available/mods-enabledに置き,a2ensite・a2enmodなどのコマンドで有効化する.
apache2.confやそこから読み込まれるファイルで指定する主な設定項目を以下に示す.
- Listen:待ち受けるIPアドレスとポート番号(通常は80.ports.confで指定)
- StartServers:起動時に生成する子プロセス数(MPMの設定)
- User:Apacheを実行するユーザ
- Group:Apacheを実行するグループ
- ServerAdmin:管理者のメールアドレス(エラーページに表示)
- ServerName:サーバのホスト名
- UserDir:ユーザごとのWebディレクトリ名(例:public_html)
- DirectoryIndex:ディレクトリアクセス時のデフォルトファイル(例:index.html)
MPM(マルチプロセッシングモジュール)
Apache 2.4では,リクエストを処理する方式をMPM(マルチプロセッシングモジュール)で選択する.古いバージョンに存在したServerTypeディレクティブ(standalone型・inetd型の切り替え)は廃止されており,現在のApacheは常にスタンドアロンの常駐プロセスとして動作する.主なMPMを以下に示す.
- prefork:リクエストごとに独立したプロセスを割り当てる方式.スレッドに対応しないモジュールとの互換性が高い.
- worker:プロセスとスレッドを併用する方式.preforkよりメモリ消費が少ない.
- event:workerを改良し,待機中の接続を効率的に扱う方式.Ubuntuの既定である.
StartServersやMaxRequestWorkers(同時に処理するリクエスト数の上限.古いバージョンのMaxClientsに相当)といったプロセス数の設定は,選択したMPMの設定ファイル(/etc/apache2/mods-available/mpm_*.conf)で行う.MPMの切り替えはa2dismod・a2enmodコマンドで行う.
ディレクトリごとのアクセス制御
Apacheでは,ディレクトリ単位でアクセス権限や機能を制御できる.これにより,公開範囲の限定やセキュリティの強化が可能となる.基本的な設定例を以下に示す.
<Directory />
Options None
AllowOverride None
Require all denied
</Directory>
この設定は,ルートディレクトリ(/)以下に対して,すべてのオプションを無効化し,アクセスを拒否している.セキュリティの基本として,まず全体を拒否し,必要なディレクトリのみ許可する方針が推奨される.
Optionsディレクティブ
Optionsディレクティブで指定可能な値を以下に示す.
- None:すべてのオプションを無効化
- All:MultiViewsを除くすべてのオプションを許可
- ExecCGI:CGIプログラムの実行を許可
- FollowSymLinks:シンボリックリンクの参照を許可
- SymLinksIfOwnerMatch:所有者が一致するシンボリックリンクのみ許可
- Includes:SSI(Server Side Include:HTMLにサーバ側で動的に内容を挿入する機能)を許可
- IncludesNoExec:SSIを許可(ただしexecコマンドは除く)
- Indexes:ディレクトリ一覧の自動生成を許可
- MultiViews:コンテントネゴシエーション(言語や形式の自動選択)を許可
注意:FollowSymLinksとIndexesは,意図しないファイルの公開につながる可能性があるため,必要な場合のみ有効にする.
AllowOverrideディレクティブ
AllowOverrideディレクティブは,.htaccessファイルによる設定の上書きをどこまで許可するかを指定する..htaccessを使用すると,ディレクトリごとに個別の設定が可能となる.
- None:.htaccessによる上書きを禁止
- All:すべての上書きを許可
- AuthConfig:認証設定の上書きを許可
- FileInfo:ファイルタイプ設定の上書きを許可
- Indexes:ディレクトリインデックス設定の上書きを許可
- Limit:アクセス制御設定の上書きを許可
- Options:Optionsディレクティブの上書きを許可
注意:AllowOverride Allは利便性が高いが,.htaccessの設置により意図しない設定変更が可能となるため,セキュリティ上のリスクがある.
standalone型の設定例
Apache 2.4の標準的な設定例を以下に示す.Apacheは常駐プロセスとして動作し,リクエストに即座に応答する.
# 基本設定の例
ServerRoot "/etc/apache2"
Listen 80
User www-data
Group www-data
ServerName www.example.ac.jp
<Directory />
Options FollowSymLinks ExecCGI Includes -Indexes
AllowOverride All
Require all granted
</Directory>
UserDir public_html
DirectoryIndex index.html index.php
AccessFileName .htaccess
<Files .htaccess>
Require all denied
</Files>
CustomLog /var/log/apache2/access.log common
ErrorLog /var/log/apache2/error.log
注意:上記の例ではRequire all grantedとしているが,本番環境では適切なアクセス制限を設定すること.
外部公開時のアクセス制御
Apacheは既定で外部のマシンからもWebページにアクセス可能である.外部公開する場合は,ファイアウォール(ufwなど)でポートを適切に制御し,必要なネットワークのみに公開する.
接続元を制限したい場合は,DirectoryやLocationブロックでRequireディレクティブを用いる.以下は社内ネットワーク(192.168.0.0/24)のみに公開する例である.
<Directory /var/www/html>
Require ip 192.168.0.0/24
</Directory>
HTTPSの設定
HTTPS(HTTP over SSL/TLS)は,通信内容を暗号化するプロトコルである.HTTPSを使用することで,通信の盗聴や改ざんを防止できる.現在では,Webサイトの標準としてHTTPSの使用が推奨されている.
以下にLet's Encrypt(無料のSSL証明書発行サービス)を使用したHTTPS設定手順を示す.
- SSLモジュールを有効化する.
# a2enmod ssl
- certbot(Let's Encryptのクライアントツール)をインストールし,証明書を取得する.certbotがApacheの設定を自動で書き換え,HTTPSの有効化とHTTPからHTTPSへのリダイレクトまで行う.
# apt install certbot python3-certbot-apache
# certbot --apache -d www.example.ac.jp
certbotに設定を任せず手動で構成する場合は,以下の手順で行う.
- HTTPS用のサイト設定ファイル(/etc/apache2/sites-available/example-ssl.conf)を作成する.
<VirtualHost *:443>
ServerName www.example.ac.jp
DocumentRoot /var/www/html
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/www.example.ac.jp/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/www.example.ac.jp/privkey.pem
</VirtualHost>
- HTTPアクセスをHTTPSへリダイレクトする設定(/etc/apache2/sites-available/000-default.conf)を行う.これにより,ユーザがHTTPでアクセスしても自動的にHTTPSへ転送される.
<VirtualHost *:80>
ServerName www.example.ac.jp
Redirect permanent / https://www.example.ac.jp/
</VirtualHost>
- 設定を有効化し,Apacheを再起動する.
# a2ensite example-ssl
# systemctl restart apache2
注意:Let's Encryptの証明書は90日間有効である.certbotは自動更新の設定を行うが,更新が正常に動作しているか定期的に確認すること.