WWW と Apache

WWWの基本概念とApache Webサーバの導入・設定方法を解説する.Apacheは広く普及しているWebサーバソフトウェアであり,UbuntuなどのLinuxディストリビューションではパッケージマネージャによる導入が容易である.apache2.confによる設定,MPM(マルチプロセッシングモジュール:リクエストを処理する方式を決める仕組み)の選択,ディレクトリごとのアクセス制御,SSL/TLSによる暗号化通信(HTTPS)など,Webサーバ運用に必要な知識を習得できる.

前提知識:Linuxの基本操作(コマンドライン,ファイル編集),ネットワークの基礎(IPアドレス,ポート番号)

【目次】

  1. WWW
  2. Apache

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つである.

Ubuntuのapache2では,設定を機能ごとのファイルに分け,apache2.confからそれらを読み込む構成になっている.サイトごとの設定はsites-available/sites-enabled,モジュールごとの設定はmods-available/mods-enabledに置き,a2ensite・a2enmodなどのコマンドで有効化する.

apache2.confやそこから読み込まれるファイルで指定する主な設定項目を以下に示す.

MPM(マルチプロセッシングモジュール)

Apache 2.4では,リクエストを処理する方式をMPM(マルチプロセッシングモジュール)で選択する.古いバージョンに存在したServerTypeディレクティブ(standalone型・inetd型の切り替え)は廃止されており,現在のApacheは常にスタンドアロンの常駐プロセスとして動作する.主なMPMを以下に示す.

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ディレクティブで指定可能な値を以下に示す.

注意:FollowSymLinksとIndexesは,意図しないファイルの公開につながる可能性があるため,必要な場合のみ有効にする.

AllowOverrideディレクティブ

AllowOverrideディレクティブは,.htaccessファイルによる設定の上書きをどこまで許可するかを指定する..htaccessを使用すると,ディレクトリごとに個別の設定が可能となる.

注意: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設定手順を示す.

  1. SSLモジュールを有効化する.
# a2enmod ssl
  1. certbot(Let's Encryptのクライアントツール)をインストールし,証明書を取得する.certbotがApacheの設定を自動で書き換え,HTTPSの有効化とHTTPからHTTPSへのリダイレクトまで行う.
# apt install certbot python3-certbot-apache
# certbot --apache -d www.example.ac.jp

certbotに設定を任せず手動で構成する場合は,以下の手順で行う.

  1. 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>
  1. 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>
  1. 設定を有効化し,Apacheを再起動する.
# a2ensite example-ssl
# systemctl restart apache2

注意:Let's Encryptの証明書は90日間有効である.certbotは自動更新の設定を行うが,更新が正常に動作しているか定期的に確認すること.