WWW と Apache

WWWの基本概念とApache Webサーバの導入・設定方法を解説する.Apacheは広く普及しているWebサーバソフトウェアであり,UbuntuなどのLinuxディストリビューションではパッケージマネージャによる導入が容易である.apache2.confによる設定,standalone型とinetd型の運用,ディレクトリごとのアクセス制御,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つである.

歴史的にはaccess.conf,srm.confも存在したが,現在はその内容をapache2.confに記述するため,実質的にはapache2.confを中心に設定を行う.

apache2.confの主な設定項目を以下に示す.

ServerTypeの違い

Apacheの動作方式にはstandalone型とinetd型がある.用途に応じて選択する.

standalone型は,Apacheが常駐プロセスとして動作する方式である.リクエストに即座に応答できるため,アクセス頻度が高いサーバに適している.

inetd型は,inetd(スーパーサーバと呼ばれる接続管理デーモン)経由で動作する方式である.リクエストがあるたびにプロセスを起動し,処理完了後に終了する.リソース消費が少なく,TCP Wrapper(接続元IPアドレスによるアクセス制御機能)と連携できるため,セキュリティ面で優れている.アクセス頻度が低いサーバや,セキュリティを重視する環境に適している.

ディレクトリごとのアクセス制御

Apacheでは,ディレクトリ単位でアクセス権限や機能を制御できる.これにより,公開範囲の限定やセキュリティの強化が可能となる.基本的な設定例を以下に示す.

<Directory />
    Options None
    AllowOverride None
    Require all denied
</Directory>

この設定は,ルートディレクトリ(/)以下に対して,すべてのオプションを無効化し,アクセスを拒否している.セキュリティの基本として,まず全体を拒否し,必要なディレクトリのみ許可する方針が推奨される.

Optionsディレクティブ

Optionsディレクティブで指定可能な値を以下に示す.

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

AllowOverrideディレクティブ

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

注意:AllowOverride Allは利便性が高いが,.htaccessの設置により意図しない設定変更が可能となるため,セキュリティ上のリスクがある.

inetd型Webサーバの設定

inetd型として運用する場合の設定手順を以下に示す.この方式は,TCP Wrapperによるアクセス制御が利用できるため,セキュリティを重視する環境に適している.

  1. /etc/apache2/apache2.confでServerTypeを設定する.
ServerType inetd
  1. /etc/inetd.confにApacheのエントリを追加する.
http stream tcp nowait www-data /usr/sbin/apache2 apache2
  1. inetdを再起動して設定を反映する.
# systemctl restart inetd

設定後は,他のマシンからもWebページにアクセス可能となる.

注意:外部公開する場合は,ファイアウォールの設定やアクセス制限を適切に行うこと.内部ネットワーク限定で運用する場合は,TCP Wrapperの/etc/hosts.allowおよび/etc/hosts.denyで接続元を制限する.

standalone型の設定例

以下にstandalone型での設定例を示す.アクセス頻度が高いサーバや,レスポンス速度を重視する環境に適している.

# standalone型の設定例
ServerType standalone
ServerRoot "/etc/apache2"
StartServers 5
MaxClients 150
Port 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
CustomLog /var/log/apache2/custom.log combined
ErrorLog /var/log/apache2/error.log

注意:上記の例ではRequire all grantedとしているが,本番環境では適切なアクセス制限を設定すること.

HTTPSの設定

HTTPS(HTTP over SSL/TLS)は,通信内容を暗号化するプロトコルである.HTTPSを使用することで,通信の盗聴や改ざんを防止できる.現在では,Webサイトの標準としてHTTPSの使用が推奨されている.

以下にLet's Encrypt(無料のSSL証明書発行サービス)を使用したHTTPS設定手順を示す.

  1. SSLモジュールを有効化する.
# a2enmod ssl
  1. certbot(Let's Encryptのクライアントツール)をインストールし,証明書を取得する.
# apt install certbot python3-certbot-apache
# certbot --apache -d www.example.ac.jp
  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は自動更新の設定を行うが,更新が正常に動作しているか定期的に確認すること.