コンテンツにスキップ

Apache HTTP Server

出典: フリー教科書『ウィキブックス(Wikibooks)』

Apache HTTP Serverの基礎

[編集]

Apache HTTP Serverとは

[編集]

基本機能とアーキテクチャ

[編集]

Apache HTTP Server(Apache httpd)は、オープンソースのウェブサーバーソフトウェアであり、世界中で最も広く利用されています。最初のバージョンは1995年にリリースされ、それ以来、堅牢性、柔軟性、パフォーマンスで知られています。Apacheは、Hypertext Transfer Protocol(HTTP)を使用してウェブページを提供するための機能を提供し、静的および動的なコンテンツの配信をサポートします。

Apache HTTP Serverの主な機能には以下が含まれます。

  • モジュール方式のアーキテクチャ: Apacheはモジュール方式を採用しており、必要な機能を動的に追加することができます。例えば、セキュリティモジュール、キャッシュモジュール、リバースプロキシモジュールなどがあります。
  • 仮想ホストのサポート: 一つのサーバーで複数のウェブサイトをホストすることができ、ドメイン名やIPアドレスに基づいてリクエストを振り分けることができます。
  • 高度なログ機能: 詳細なアクセスログやエラーログを生成し、サーバーの動作状況を監視することができます。

歴史と進化

[編集]

Apache HTTP Serverは、NCSA HTTPdプロジェクトを基にして1995年にリリースされました。名前の由来は「A Patchy Server」(多くのパッチを当てたサーバー)と言われています。プロジェクトは急速に成長し、Apache Software Foundation(ASF)によって管理されています。

  • Apache 1.x: 最初のバージョンであり、シンプルでありながらも強力な機能を持っていました。
  • Apache 2.x: 2002年にリリースされ、パフォーマンスの向上、マルチプロセッシングモジュール(MPM)の導入、より柔軟なモジュールシステムなどが特徴です。

インストール前の準備

[編集]

システム要件

[編集]

Apache HTTP Serverをインストールする前に、以下のシステム要件を確認してください。

  • オペレーティングシステム: UNIX(FreeBSD、NetBSD、OpenBSD、macOS、Solarisなど)およびLinuxのディストリビューションなどのUNIXを模倣したOSやWindowsに対応
  • ハードウェア: 最低限のリソースとして、1GHz以上のCPU、512MB以上のRAM、100MB以上のディスクスペースが推奨されます。ただし、実際のリソース要件はトラフィックや利用するモジュールによって変動します。

次章では、具体的なインストール手順について詳しく説明します。

インストール

[編集]

FreeBSDへのインストール

[編集]

FreeBSDは、堅牢性とセキュリティに優れたUNIX系のオペレーティングシステムであり、サーバー用途に非常に適しています。この章では、FreeBSDでのApache HTTP Serverのインストール手順について説明します。

FreeBSD特有の注意点

[編集]

FreeBSDは、Ports Collectionと呼ばれる独自のパッケージ管理システムを持っており、ソースコードからのインストールを容易にする機能があります。また、pkgと呼ばれるPorts Collectionに基づいたバイナリパッケージ管理システムも提供されており、迅速なインストールが可能です。

インストール手順

[編集]

以下の作業はRoot権限が必要です。

システムの更新
[編集]

まず、システムのパッケージリストを最新の状態に更新します。

pkg update && pkg upgrade
Apache HTTP Serverのインストール
[編集]

Apache HTTP Serverをインストールするためには、pkgコマンドを使用します。

pkg install apache24

apache24は、Apache HTTP Serverのバージョン2.4を指します。このコマンドを実行すると、必要な依存関係も自動的にインストールされます。

Apache HTTP Serverの起動と自動起動設定
[編集]

インストールが完了したら、Apacheを起動し、システム起動時に自動的に開始するように設定します。

sysrc apache24_enable="YES"
service apache24 start

sysrcコマンドは、FreeBSDのシステム設定を変更するためのコマンドで、apache24_enable="YES"と設定することで、システム起動時にApacheが自動的に起動するようになります。

ファイアウォールの設定
[編集]

必要に応じて、ファイアウォールの設定を確認し、HTTP(ポート80)およびHTTPS(ポート443)へのアクセスを許可します。pfを使用している場合の設定例を示します。

vi /etc/pf.conf

/etc/pf.confに以下の行を追加します。

pass in on $ext_if proto tcp from any to any port { 80, 443 }

設定を反映するためにpfを再読み込みします。

pfctl -f /etc/pf.conf
pfctl -e
Apacheの動作確認
[編集]

ブラウザを開き、サーバーのIPアドレスにアクセスしてApacheが正しく動作していることを確認します。例えば、http://localhostにアクセスします。Apacheのデフォルトページが表示されれば、インストールは正常に完了しています。

FreeBSD特有の設定

[編集]

FreeBSDには、いくつかのApache HTTP Serverの設定が特有です。

設定ファイルの場所
[編集]

FreeBSDでは、Apacheの設定ファイルは以下のディレクトリに配置されています。

/usr/local/etc/apache24/

主な設定ファイルはhttpd.confですが、httpd.confは直接編集せずhttpd.confに読み込まれる設定ファイルをつかって設定します。

Apacheのドキュメントルート
[編集]

デフォルトでは、ドキュメントルートは以下のディレクトリに設定されています。

/usr/local/www/apache24/data/

必要に応じて、httpd.conf内でドキュメントルートを変更できます。

ログファイルの場所
[編集]

ログファイルは以下のディレクトリに配置されています。

/var/log/httpd-access.log
/var/log/httpd-error.log

まとめ

[編集]

FreeBSDでのApache HTTP Serverのインストール手順を説明しました。次章では、Apache HTTP Serverの基本設定について詳しく説明します。

基本設定

[編集]

初期設定ファイルの編集

[編集]

Apache HTTP Serverをインストールした後、適切な設定を行うことが重要です。ここでは、基本的な設定ファイルであるhttpd.confの編集方法について説明します。

httpd.confの基本構造

[編集]

httpd.confは、Apacheの主要な設定ファイルであり、サーバーの動作を制御するための指示が記述されています。FreeBSDでは、httpd.confは以下のディレクトリにあります。

/usr/local/etc/apache24/httpd.conf

pkg でインストールすると

/usr/local/etc/apache24/httpd.conf.sample

に標準的な構成の設定ファイルがインストールされるので

ln -s /usr/local/etc/apache24/httpd.conf.sample /usr/local/etc/apache24/httpd.conf

とシンボリックリンクは張ります。


主なディレクティブの説明

[編集]

以下は、httpd.confの中で特に重要なディレクティブの説明です。

ServerRoot
Apacheの基本ディレクトリを指定します。デフォルトは/usr/localです。
  ServerRoot "/usr/local"
Listen
Apacheが待ち受けるIPアドレスとポートを指定します。通常、ポート80を使用します。
  Listen 80
ServerAdmin
サーバー管理者のメールアドレスを指定します。エラーページなどで表示されます。
  ServerAdmin [email protected]
DocumentRoot
ウェブサイトのルートディレクトリを指定します。デフォルトは/usr/local/www/apache24/dataです。
  DocumentRoot "/usr/local/www/apache24/data"
<Directory>
特定のディレクトリに対する設定を行います。DocumentRootの設定例を示します。
  <Directory "/usr/local/www/apache24/data">
      Options Indexes FollowSymLinks
      AllowOverride None
      Require all granted
  </Directory>
LoadModule
モジュールをロードするためのディレクティブです。例えば、mod_rewriteを有効にするには以下のように記述します。
  LoadModule rewrite_module libexec/apache24/mod_rewrite.so
Include
設定ファイルを読み込むためのディレクティブです。
  Include etc/apache24/Includes/*.conf

この設定があるため、/usr/local/etc/apache24/Includes/ にあり .conf で終わるファイルが自動的に読み込まれます。 これを利用して /usr/local/etc/apache24/httpd.conf 自体は編集せず、/usr/local/etc/apache24/Includes/ 以下に /usr/local/etc/apache24/extra/*.conf.sample のシンボリックリンクを貼ったり、カスタム設定を書いた設定ファイルを置きます。

仮想ホストの設定

[編集]

仮想ホストを使用することで、一つのサーバーで複数のドメインをホストできます。以下に、名前ベースの仮想ホストとIPベースの仮想ホストの設定例を示します。

名前ベースの仮想ホスト
[編集]

名前ベースの仮想ホストは、同じIPアドレスで複数のドメインをホストする場合に使用します。

/usr/local/etc/apache24/Includes/namebase-vhosts.conf
<VirtualHost *:80>
    ServerAdmin [email protected]
    DocumentRoot "/usr/local/www/domain1"
    ServerName www.domain1.com
    ErrorLog "/var/log/domain1-error.log"
    CustomLog "/var/log/domain1-access.log" common
</VirtualHost>

<VirtualHost *:80>
    ServerAdmin [email protected]
    DocumentRoot "/usr/local/www/domain2"
    ServerName www.domain2.com
    ErrorLog "/var/log/domain2-error.log"
    CustomLog "/var/log/domain2-access.log" common
</VirtualHost>
IPベースの仮想ホスト
[編集]

IPベースの仮想ホストは、異なるIPアドレスで異なるドメインをホストする場合に使用します。

/usr/local/etc/apache24/Includes/ipaddrbase-vhosts.conf
<VirtualHost 192.168.1.1:80>
    ServerAdmin [email protected]
    DocumentRoot "/usr/local/www/domain1"
    ServerName www.domain1.com
    ErrorLog "/var/log/domain1-error.log"
    CustomLog "/var/log/domain1-access.log" common
</VirtualHost>

<VirtualHost 192.168.1.2:80>
    ServerAdmin [email protected]
    DocumentRoot "/usr/local/www/domain2"
    ServerName www.domain2.com
    ErrorLog "/var/log/domain2-error.log"
    CustomLog "/var/log/domain2-access.log" common
</VirtualHost>

設定の反映と確認

[編集]

設定ファイルを編集した後、Apacheを再起動して変更を反映させます。

service apache24 restart

設定が正しく反映されたかどうかを確認するには、Apacheの構文チェックを行います。

apachectl configtest

エラーメッセージが表示されない場合、設定は正しく行われています。

まとめ

[編集]

この章では、Apache HTTP Serverの基本設定について説明しました。次章では、セキュリティ設定について詳しく説明します。

セキュリティ

[編集]

ウェブサーバーのセキュリティは非常に重要です。適切な設定を行うことで、サーバーを外部の脅威から保護し、データの安全性を確保することができます。この章では、Apache HTTP Serverのセキュリティ設定について説明します。

基本的なセキュリティ設定

[編集]

権限とファイルアクセス制御

[編集]

Apacheを安全に運用するためには、適切な権限設定が重要です。以下のポイントに注意してください。

  • ユーザーとグループ: Apacheは専用のユーザーとグループで動作するように設定します。通常、デフォルトではwwwユーザーとwwwグループが使用されます。httpd.confで以下の設定を確認または変更します。
      User www
      Group www
    
  • ディレクトリのアクセス制御: <Directory>ディレクティブを使用して、特定のディレクトリに対するアクセスを制御します。以下の例は、DocumentRootディレクトリのアクセスを制御する設定です。
      <Directory "/usr/local/www/apache24/data">
          Options -Indexes +FollowSymLinks
          AllowOverride None
          Require all granted
      </Directory>
    
    • Options -Indexes:ディレクトリのリスト表示を無効にします。
    • AllowOverride None:.htaccessファイルによる設定の上書きを禁止します。
    • Require all granted:すべてのリクエストを許可します。

SSL/TLSの設定

[編集]

SSL/TLSを使用して通信を暗号化することで、データの盗聴や改ざんを防ぐことができます。以下は、SSL/TLSの設定手順です。

OpenSSLのインストール
[編集]

FreeBSDにはOpenSSLが標準でインストールされていますが、最新バージョンを使用するためにパッケージを更新します。

pkg install openssl
SSL証明書の作成
[編集]

自己署名証明書を作成するか、認証局(CA)から証明書を取得します。自己署名証明書を作成する手順は以下の通りです。

openssl req -new -newkey rsa:2048 -days 365 -nodes -x509 -keyout /usr/local/etc/apache24/server.key -out /usr/local/etc/apache24/server.crt
SSLモジュールの有効化
[編集]

httpd.confに以下の行を追加して、SSLモジュールを有効にします。

LoadModule ssl_module libexec/apache24/mod_ssl.so
Include /usr/local/etc/apache24/extra/httpd-ssl.conf
SSL設定の編集
[編集]

httpd-ssl.confファイルを編集して、SSL設定を行います。デフォルトの設定ファイルは以下にあります。

vi /usr/local/etc/apache24/extra/httpd-ssl.conf

以下の行を確認または変更します。

<VirtualHost _default_:443>
    DocumentRoot "/usr/local/www/apache24/data"
    ServerName www.example.com:443
    SSLEngine on
    SSLCertificateFile "/usr/local/etc/apache24/server.crt"
    SSLCertificateKeyFile "/usr/local/etc/apache24/server.key"
    <FilesMatch "\.(cgi|shtml|phtml|php)$">
        SSLOptions +StdEnvVars
    </FilesMatch>
    <Directory "/usr/local/www/apache24/cgi-bin">
        SSLOptions +StdEnvVars
    </Directory>
    BrowserMatch "MSIE [2-6]" \
        nokeepalive ssl-unclean-shutdown \
        downgrade-1.0 force-response-1.0
    CustomLog "/var/log/ssl_request_log" \
        "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
</VirtualHost>

セキュリティモジュールの活用

[編集]

Apacheには、セキュリティを強化するためのモジュールが多数用意されています。ここでは、mod_securitymod_evasiveについて説明します。

mod_security
[編集]

mod_securityは、ウェブアプリケーションファイアウォール(WAF)として機能し、不正なリクエストをフィルタリングします。

pkg install ap24-mod_security

httpd.confに以下の行を追加して、モジュールを有効にします。

LoadModule security2_module libexec/apache24/mod_security2.so
Include /usr/local/etc/modsecurity/*.conf
mod_evasive
[編集]

mod_evasiveは、DoS(Denial of Service)攻撃からサーバーを保護するためのモジュールです。

pkg install ap24-mod_evasive

httpd.confに以下の行を追加して、モジュールを有効にします。

LoadModule evasive20_module libexec/apache24/mod_evasive24.so

以下は、mod_evasiveの設定例です。

<IfModule mod_evasive20.c>
    DOSHashTableSize 3097
    DOSPageCount 2
    DOSSiteCount 50
    DOSPageInterval 1
    DOSSiteInterval 1
    DOSBlockingPeriod 10
    DOSEmailNotify [email protected]
    DOSSystemCommand "su - someuser -c '/sbin/... %s ...'"
    DOSLogDir "/var/log/mod_evasive"
</IfModule>

まとめ

[編集]

この章では、Apache HTTP Serverのセキュリティ設定について説明しました。次章では、パフォーマンス最適化について詳しく説明します。

パフォーマンス最適化

[編集]

ウェブサーバーのパフォーマンスを最適化することは、ユーザーエクスペリエンスを向上させ、サーバーのリソースを効率的に利用するために重要です。この章では、Apache HTTP Serverのパフォーマンスを最適化する方法について説明します。

基本的な最適化設定

[編集]

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

[編集]

Apache HTTP Serverは、複数のマルチプロセッシングモジュール(MPM)を提供しており、サーバーのリクエスト処理方式を選択できます。最も一般的なMPMは以下の通りです。

prefork
各リクエストを個別のプロセスで処理します。安定性が高いが、メモリ消費が多い。
worker
各プロセスが複数のスレッドを持ち、リクエストを並行処理します。効率的でスケーラブル。
event
worker MPMに基づいており、Keep-Aliveリクエストの処理を最適化します。高い並行処理能力を持つ。

httpd.confでMPMを設定します。例えば、worker MPMを使用する場合:

LoadModule mpm_worker_module libexec/apache24/mod_mpm_worker.so

Keep-Aliveの設定

[編集]

Keep-Aliveを有効にすると、複数のリクエストを同じ接続で処理でき、パフォーマンスが向上します。ただし、Keep-Alive接続の数やタイムアウト時間を適切に設定することが重要です。

KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5

コンテンツ圧縮

[編集]

コンテンツを圧縮することで、帯域幅の使用量を削減し、ページロード時間を短縮できます。mod_deflateモジュールを使用してコンテンツを圧縮します。

LoadModule deflate_module libexec/apache24/mod_deflate.so

<IfModule mod_deflate.c>
    AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/javascript
</IfModule>

キャッシングの活用

[編集]

キャッシングを活用することで、サーバーの負荷を軽減し、レスポンス時間を短縮できます。Apache HTTP Serverは、複数のキャッシングモジュールを提供しています。

mod_cacheとmod_cache_disk

[編集]

mod_cachemod_cache_diskを使用してディスクベースのキャッシングを設定します。

LoadModule cache_module libexec/apache24/mod_cache.so
LoadModule cache_disk_module libexec/apache24/mod_cache_disk.so

<IfModule mod_cache.c>
    <IfModule mod_cache_disk.c>
        CacheRoot "/var/cache/apache2/mod_cache_disk"
        CacheEnable disk "/"
        CacheDirLevels 2
        CacheDirLength 1
    </IfModule>
</IfModule>

mod_expires

[編集]

mod_expiresを使用して、キャッシュ有効期限を設定します。

LoadModule expires_module libexec/apache24/mod_expires.so

<IfModule mod_expires.c>
    ExpiresActive On
    ExpiresDefault "access plus 1 day"
    ExpiresByType text/html "access plus 1 hour"
    ExpiresByType image/gif "access plus 1 month"
    ExpiresByType image/jpeg "access plus 1 month"
    ExpiresByType image/png "access plus 1 month"
</IfModule>

データベース接続の最適化

[編集]

ウェブサーバーとデータベースの連携は、ウェブアプリケーションのパフォーマンスに大きく影響します。以下のポイントに注意してデータベース接続を最適化します。

  • 持続的接続の使用: データベースとの持続的接続を確立することで、接続オーバーヘッドを削減します。
  • 接続プールの利用: データベース接続プールを利用して、同時接続数を制御し、リソースの効率的な利用を図ります。
  • クエリの最適化: データベースクエリを最適化し、インデックスを適切に使用することで、データベースのレスポンス時間を短縮します。

ロードバランシング

[編集]

高トラフィックなウェブサイトでは、ロードバランシングを導入することで、複数のサーバーにリクエストを分散し、パフォーマンスを向上させます。Apache HTTP Serverには、mod_proxy_balancerモジュールを使用してロードバランシングを設定できます。

LoadModule proxy_module libexec/apache24/mod_proxy.so
LoadModule proxy_balancer_module libexec/apache24/mod_proxy_balancer.so
LoadModule lbmethod_byrequests_module libexec/apache24/mod_lbmethod_byrequests.so

<Proxy "balancer://mycluster">
    BalancerMember "http://backend1.example.com:80"
    BalancerMember "http://backend2.example.com:80"
    ProxySet lbmethod=byrequests
</Proxy>

ProxyPass "/balancer" "balancer://mycluster"
ProxyPassReverse "/balancer" "balancer://mycluster"

まとめ

[編集]

この章では、Apache HTTP Serverのパフォーマンスを最適化するための設定と手法について説明しました。次章では、ログ管理とモニタリングについて詳しく説明します。

ログ管理とモニタリング

[編集]

効果的なログ管理とモニタリングは、サーバーの健全性を維持し、問題を迅速に特定・解決するために不可欠です。この章では、Apache HTTP Serverのログ管理とモニタリングの設定について説明します。

ログの基本設定

[編集]

Apache HTTP Serverは、アクセスログとエラーログの2種類のログを提供しています。これらのログファイルは、httpd.confで設定します。

アクセスログ

[編集]

アクセスログには、クライアントのリクエスト情報が記録されます。デフォルトの設定は以下の通りです。

CustomLog "/var/log/httpd-access.log" common

この設定は、アクセスログを/var/log/httpd-access.logに記録し、ログフォーマットを「common」に設定しています。ログフォーマットはLogFormatディレクティブを使用してカスタマイズできます。

LogFormat "%h %l %u %t \"%r\" %>s %b" common
  • %h: リモートホスト
  • %l: リモートログ名(identdを使用)
  • %u: リモートユーザー(HTTP認証を使用)
  • %t: リクエストの時刻
  • \"%r\": リクエストの最初の行
  • %>s: ステータスコード
  • %b: 送信されたバイト数

エラーログ

[編集]

エラーログには、サーバーエラーや警告メッセージが記録されます。デフォルトの設定は以下の通りです。

ErrorLog "/var/log/httpd-error.log"

エラーログのレベルはLogLevelディレクティブを使用して設定できます。

LogLevel warn
  • LogLevelの主なオプション:
    • emerg: 緊急(システムが使用不能)
    • alert: 直ちに修正が必要
    • crit: 致命的な状態
    • error: エラー
    • warn: 警告
    • notice: 通常よりも重要な情報
    • info: 情報
    • debug: デバッグメッセージ

ログのローテーション

[編集]

ログファイルが大きくなりすぎると、管理が困難になります。ログローテーションを設定することで、ログファイルを一定期間ごとに分割・アーカイブできます。FreeBSDでは、newsyslogを使用してログローテーションを設定します。

newsyslogの設定

[編集]

/etc/newsyslog.confファイルに、Apacheのログファイルのローテーション設定を追加します。

vi /etc/newsyslog.conf

以下の行を追加します。

/var/log/httpd-access.log    644  7  100  *  Z
/var/log/httpd-error.log     644  7  100  *  Z
  • 644: ファイルのパーミッション
  • 7: 保持するログファイルの数
  • 100: ログファイルの最大サイズ(KB単位)
  • *: ログローテーションのタイミング(*はサイズに基づくローテーション)
  • Z: 圧縮オプション(gzip)

モニタリング

[編集]

Apache HTTP Serverのモニタリングは、サーバーのパフォーマンスと健全性をリアルタイムで監視するために重要です。

mod_status

[編集]

mod_statusモジュールを使用して、サーバーのステータス情報を取得できます。mod_statusを有効にするには、httpd.confに以下の行を追加します。

LoadModule status_module libexec/apache24/mod_status.so

<Location "/server-status">
    SetHandler server-status
    Require host example.com
</Location>

これで、http://localhost/server-statusにアクセスすると、サーバーのステータス情報が表示されます。

外部モニタリングツール

[編集]

外部モニタリングツールを使用することで、より詳細な解析とアラート機能を利用できます。以下は、代表的なモニタリングツールです。

Nagios
オープンソースのモニタリングツールで、サーバーやネットワークの監視に広く利用されています。
Zabbix
Nagiosと同様に、オープンソースで強力なモニタリングツールです。多機能で拡張性が高い。
New Relic
クラウドベースのモニタリングサービスで、アプリケーションパフォーマンスの監視に特化しています。

アラートの設定

[編集]

サーバーの状態に応じてアラートを設定することで、問題が発生した際に迅速に対応できます。外部モニタリングツールには、カスタムアラートを設定する機能が含まれています。

Nagiosでのアラート設定

[編集]

NagiosでApache HTTP Serverのアラートを設定する例を示します。まず、Apacheのプラグインをインストールします。

pkg install nagios-plugins-apache

次に、/usr/local/etc/nagios/objects/commands.cfgにApacheのチェックコマンドを追加します。

define command {
    command_name check_apache
    command_line /usr/local/libexec/nagios/check_http -H localhost
}

最後に、/usr/local/etc/nagios/objects/localhost.cfgにサービス定義を追加します。

define service {
    use                 generic-service
    host_name           localhost
    service_description Apache
    check_command       check_apache
}

まとめ

[編集]

この章では、Apache HTTP Serverのログ管理とモニタリングについて説明しました。これにより、サーバーの健全性を維持し、問題を迅速に特定・解決するための基盤が整います。次章では、トラブルシューティングとメンテナンスについて詳しく説明します。

トラブルシューティングとメンテナンス

[編集]

ウェブサーバーの運用において、トラブルシューティングと定期的なメンテナンスは重要な作業です。この章では、Apache HTTP Serverのトラブルシューティング手法とメンテナンスのベストプラクティスについて説明します。

トラブルシューティング

[編集]

エラーログの解析

[編集]

エラーログは、サーバーで発生した問題の詳細な情報を提供します。/var/log/httpd-error.logに記録されるエラーログを定期的に確認し、問題の原因を特定します。

tail -f /var/log/httpd-error.log

サービスの状態確認

[編集]

Apache HTTP Serverのサービスが正しく動作しているか確認するために、以下のコマンドを使用します。

service apache24 status

設定ファイルのチェック

[編集]

設定ファイルに誤りがないか確認するために、apachectlコマンドを使用します。

apachectl configtest

エラーが発生した場合は、httpd.confファイルを修正し、再度確認します。

ポートの確認

[編集]

Apache HTTP Serverが正しいポートでリスニングしているか確認します。

sockstat -4 -6 | grep httpd

出力に指定したポートが含まれていることを確認します。

モジュールのロード状況確認

[編集]

Apacheが必要なモジュールを正しくロードしているか確認します。httpd -Mコマンドを使用すると、ロードされているモジュールの一覧が表示されます。

httpd -M

よくある問題と対処法

[編集]

サーバーが起動しない

[編集]
エラーログの確認
/var/log/httpd-error.logを確認し、エラーメッセージをチェックします。
設定ファイルの確認
設定ファイルに文法エラーがないか確認します。apachectl configtestを使用して設定ファイルをチェックします。

ページが表示されない

[編集]
アクセスログの確認
/var/log/httpd-access.logを確認し、リクエストがサーバーに到達しているか確認します。
ファイルのパーミッション
サーバーがドキュメントルート内のファイルにアクセスできるか確認します。
仮想ホストの設定
仮想ホストの設定が正しいか確認します。特にServerNameDocumentRootの設定に注意します。

パフォーマンスの低下

[編集]
リソースの監視
サーバーのCPUやメモリの使用状況を監視し、ボトルネックを特定します。topコマンドやhtopコマンドを使用します。
ログの確認
アクセスログやエラーログを確認し、異常なリクエストやエラーメッセージがないか確認します。
設定の見直し
Keep-AliveやMPMの設定を見直し、最適化を行います。

メンテナンス

[編集]

定期的なバックアップ

[編集]

設定ファイルや重要なデータの定期的なバックアップを行います。以下のスクリプトは、/usr/local/etc/apache24ディレクトリのバックアップを作成する例です。

#!/bin/sh
BACKUP_DIR="/backup/apache24"
DATE=$(date +"%Y%m%d")
tar -czf $BACKUP_DIR/apache24_$DATE.tar.gz /usr/local/etc/apache24

このスクリプトをcronジョブに登録し、定期的に実行します。

crontab -e

以下の行を追加します(毎日午前2時にバックアップを実行)。

0 2 * * * /path/to/backup_script.sh

アップデートとパッチの適用

[編集]

セキュリティホールやバグを修正するために、Apache HTTP Serverや関連パッケージを定期的にアップデートします。

pkg update && pkg upgrade apache24

ログのローテーションとクリーンアップ

[編集]

ログファイルのサイズが大きくならないように、定期的にログローテーションを行い、古いログファイルをクリーンアップします。newsyslogの設定を使用して、自動的にログローテーションを行います。

サーバーヘルスチェック

[編集]

サーバーのヘルスチェックを定期的に実施し、異常がないか確認します。例えば、以下のようなスクリプトをcronジョブに登録します。

#!/bin/sh
if ! pgrep httpd > /dev/null
then
    sudo service apache24 start
    echo "Apache HTTP Server was restarted at $(date)" | mail -s "Apache HTTP Server restarted" [email protected]
fi

このスクリプトは、Apache HTTP Serverが動作していない場合に再起動し、管理者に通知します。

まとめ

[編集]

この章では、Apache HTTP Serverのトラブルシューティングとメンテナンスについて説明しました。これらの手法を活用することで、サーバーの安定性と信頼性を向上させることができます。次章では、Apache HTTP Serverの拡張とモジュールについて詳しく説明します。

拡張とモジュール

[編集]

Apache HTTP Serverは、多くのモジュールを利用することで機能を拡張できます。この章では、Apache HTTP Serverの拡張と代表的なモジュールの設定・利用方法について説明します。

モジュールの概要

[編集]

Apache HTTP Serverのモジュールは、大きく分けて以下の3つに分類されます。

コアモジュール
基本的な機能を提供するモジュール。デフォルトで組み込まれています。
標準モジュール
一般的な拡張機能を提供するモジュール。必要に応じて有効化します。
サードパーティモジュール
外部の開発者によって提供されるモジュール。追加インストールが必要です。

モジュールの有効化と無効化

[編集]

モジュールを有効化するには、LoadModuleディレクティブを使用します。無効化するには、この行をコメントアウトします。

LoadModule rewrite_module libexec/apache24/mod_rewrite.so
LoadModule cgi_module libexec/apache24/mod_cgi.so

代表的なモジュールとその設定

[編集]

mod_rewrite

[編集]

mod_rewriteは、URLの書き換えを行う強力なモジュールです。SEO対策やURLのリダイレクトに使用されます。

有効化するには、httpd.confに以下の行を追加します。

LoadModule rewrite_module libexec/apache24/mod_rewrite.so

設定例:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteRule ^/old-page$ /new-page [R=301,L]
</IfModule>

mod_ssl

[編集]

mod_sslは、SSL/TLSを使用して通信を暗号化するためのモジュールです。HTTPSをサポートするために使用します。

有効化するには、httpd.confに以下の行を追加します。

LoadModule ssl_module libexec/apache24/mod_ssl.so
Include etc/apache24/extra/httpd-ssl.conf

SSL設定例(httpd-ssl.conf内):

<VirtualHost *:443>
    ServerName www.example.com
    DocumentRoot "/usr/local/www/apache24/data"

    SSLEngine on
    SSLCertificateFile "/usr/local/etc/apache24/ssl/server.crt"
    SSLCertificateKeyFile "/usr/local/etc/apache24/ssl/server.key"

    <Directory "/usr/local/www/apache24/data">
        Require all granted
    </Directory>
</VirtualHost>

mod_security

[編集]

mod_securityは、ウェブアプリケーションファイアウォール(WAF)として機能し、攻撃からサーバーを保護します。

インストールと有効化:

pkg install mod_security

httpd.confに以下の行を追加します。

LoadModule security2_module libexec/apache24/mod_security2.so
Include etc/modsecurity/modsecurity.conf

設定例(modsecurity.conf内):

<IfModule security2_module>
    SecRuleEngine On
    SecRequestBodyAccess On
    SecResponseBodyAccess On

    SecRule REQUEST_HEADERS:User-Agent "curl" "id:1001,phase:1,deny,status:403,msg:'Curl requests are not allowed'"
</IfModule>

mod_proxy

[編集]

mod_proxyは、リバースプロキシやロードバランシングを行うためのモジュールです。

有効化するには、httpd.confに以下の行を追加します。

LoadModule proxy_module libexec/apache24/mod_proxy.so
LoadModule proxy_http_module libexec/apache24/mod_proxy_http.so

設定例:

<IfModule mod_proxy.c>
    ProxyPass "/app" "http://backend-server/app"
    ProxyPassReverse "/app" "http://backend-server/app"
</IfModule>

サードパーティモジュールの導入

[編集]

サードパーティモジュールは、公式リポジトリ外からインストールします。代表的なものとして、mod_evasiveがあります。これは、DDoS攻撃を防ぐためのモジュールです。

mod_evasiveのインストールと設定

[編集]

インストール手順:

pkg install ap24-mod_evasive

有効化と設定(httpd.conf内):

LoadModule evasive20_module libexec/apache24/mod_evasive20.so

<IfModule mod_evasive20.c>
    DOSHashTableSize 3097
    DOSPageCount 2
    DOSSiteCount 50
    DOSPageInterval 1
    DOSSiteInterval 1
    DOSBlockingPeriod 10
</IfModule>

モジュールのトラブルシューティング

[編集]

モジュールの問題が発生した場合、以下の手順でトラブルシューティングを行います。

  1. エラーログの確認: /var/log/httpd-error.logを確認し、エラーメッセージを特定します。
  2. 設定ファイルの確認: モジュールの設定ファイルに誤りがないか確認します。
  3. モジュールの依存関係: 必要な他のモジュールが正しくロードされているか確認します。
  4. バージョンの確認: モジュールのバージョンがApache HTTP Serverと互換性があるか確認します。

まとめ

[編集]

この章では、Apache HTTP Serverの拡張と代表的なモジュールについて説明しました。これにより、サーバーの機能を拡張し、さまざまな要件に対応できるようになります。次章では、Apache HTTP Serverのセキュリティ強化について詳しく説明します。

セキュリティ強化

[編集]

ウェブサーバーのセキュリティは非常に重要です。Apache HTTP Serverのセキュリティを強化することで、不正アクセスや攻撃からサーバーを保護できます。この章では、Apache HTTP Serverのセキュリティ強化のための具体的な設定やベストプラクティスについて説明します。

基本的なセキュリティ設定

[編集]

サーバー情報の非公開化

[編集]

デフォルトの設定では、Apacheはエラーページにサーバー情報を表示します。この情報は攻撃者にとって有用な手がかりになるため、非公開にすることを推奨します。

ServerSignature Off
ServerTokens Prod
  • ServerSignature Off: エラーページのサーバー署名を非表示にします。
  • ServerTokens Prod: レスポンスヘッダーに最低限のサーバー情報のみを表示します。

ドキュメントルートの制限

[編集]

ドキュメントルートディレクトリへのアクセスを制限し、必要最低限のパーミッションのみを付与します。

<Directory "/usr/local/www/apache24/data">
    Options None
    AllowOverride None
    Require all granted
</Directory>
  • Options None: CGIやシンボリックリンクなどのオプションを無効化します。
  • AllowOverride None: .htaccessファイルによる設定の上書きを禁止します。

ファイルのパーミッション設定

[編集]

Apacheが読み書きできるファイルやディレクトリのパーミッションを適切に設定します。

chmod -R 755 /usr/local/www/apache24/data
chown -R www:www /usr/local/www/apache24/data
  • chmod -R 755: 所有者に読み書き実行権限を付与し、グループと他のユーザーには読み実行権限のみを付与します。
  • chown -R www:www: Apacheの実行ユーザーとグループに所有権を変更します。

HTTPSの導入

[編集]

HTTPSは、通信を暗号化し、データの盗聴や改ざんを防ぎます。前章で説明したmod_sslを使用して設定します。

Let's Encryptの導入

[編集]

Let's Encryptは、無料のSSL/TLS証明書を提供するサービスです。certbotを使用して簡単に証明書を取得できます。

pkg install py37-certbot
certbot certonly --webroot -w /usr/local/www/apache24/data -d example.com -d www.example.com

証明書の取得後、httpd-ssl.confを以下のように編集します。

<VirtualHost *:443>
    ServerName www.example.com
    DocumentRoot "/usr/local/www/apache24/data"

    SSLEngine on
    SSLCertificateFile "/usr/local/etc/letsencrypt/live/example.com/fullchain.pem"
    SSLCertificateKeyFile "/usr/local/etc/letsencrypt/live/example.com/privkey.pem"

    <Directory "/usr/local/www/apache24/data">
        Require all granted
    </Directory>
</VirtualHost>

HTTPからHTTPSへのリダイレクト

[編集]

HTTPでのアクセスを自動的にHTTPSへリダイレクトします。httpd.confに以下の設定を追加します。

<VirtualHost *:80>
    ServerName www.example.com
    Redirect permanent / https://www.example.com/
</VirtualHost>

セキュリティモジュールの利用

[編集]

mod_security

[編集]

前章で説明したmod_securityは、ウェブアプリケーションファイアウォールとして機能し、攻撃を検出・防御します。

<IfModule security2_module>
    SecRuleEngine On
    SecRequestBodyAccess On
    SecResponseBodyAccess On
    SecRule REQUEST_HEADERS:User-Agent "curl" "id:1001,phase:1,deny,status:403,msg:'Curl requests are not allowed'"
</IfModule>

mod_evasive

[編集]

mod_evasiveは、DDoS攻撃やブルートフォース攻撃を防ぐためのモジュールです。

<IfModule mod_evasive20.c>
    DOSHashTableSize 3097
    DOSPageCount 2
    DOSSiteCount 50
    DOSPageInterval 1
    DOSSiteInterval 1
    DOSBlockingPeriod 10
</IfModule>

その他のセキュリティ対策

[編集]

バージョンの定期的な更新

[編集]

Apache HTTP Serverのバージョンを最新のものに保つことで、既知の脆弱性を防ぎます。

pkg update
pkg upgrade apache24

不要なモジュールの無効化

[編集]

使用しないモジュールは無効にすることで、攻撃のリスクを減少させます。httpd.confから該当モジュールのLoadModule行をコメントアウトします。

LoadModule status_module libexec/apache24/mod_status.so
LoadModule cgi_module libexec/apache24/mod_cgi.so

ファイアウォールの設定

[編集]

FreeBSDのファイアウォール(pfやipfw)を使用して、不要なポートへのアクセスを制限します。

例として、pfを使用した設定ファイル(/etc/pf.conf)を以下に示します。

ext_if="vtnet0"
set skip on lo

block in all
pass out all keep state

pass in on $ext_if proto tcp from any to any port 80
pass in on $ext_if proto tcp from any to any port 443

ファイアウォールを有効にします。

service pf start
pfctl -f /etc/pf.conf

まとめ

[編集]

この章では、Apache HTTP Serverのセキュリティ強化のための設定とベストプラクティスについて説明しました。これらの対策を実施することで、サーバーの安全性を大幅に向上させることができます。次章では、Apache HTTP Serverのパフォーマンスチューニングについて詳しく説明します。

実践例とベストプラクティス

[編集]

この章では、実際の設定例とベストプラクティスを通じて、Apache HTTP Serverの運用をより効率的に行うための手法を紹介します。特に、よくある設定例や特定のアプリケーションのホスティングについて詳述します。

よくある設定例

[編集]

静的サイトのホスティング

[編集]

Apache HTTP Serverを使用して静的コンテンツをホストする場合の設定例です。

<VirtualHost *:80>
    ServerName www.example.com
    DocumentRoot "/usr/local/www/apache24/data"

    <Directory "/usr/local/www/apache24/data">
        Require all granted
        Options Indexes FollowSymLinks
        AllowOverride None
    </Directory>

    ErrorLog "/var/log/httpd/example.com-error_log"
    CustomLog "/var/log/httpd/example.com-access_log" common
</VirtualHost>

PHPアプリケーションのホスティング

[編集]

PHPを使用した動的なウェブサイトをホストする設定例です。

<VirtualHost *:80>
    ServerName www.example.com
    DocumentRoot "/usr/local/www/apache24/data"

    <Directory "/usr/local/www/apache24/data">
        Require all granted
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        DirectoryIndex index.php
    </Directory>

    ErrorLog "/var/log/httpd/example.com-error_log"
    CustomLog "/var/log/httpd/example.com-access_log" common
</VirtualHost>

WordPressのホスティング

[編集]

WordPressをホストするための設定例です。WordPressはPHPとMySQLを使用するため、適切なモジュールの有効化と設定が必要です。

<VirtualHost *:80>
    ServerName www.example.com
    DocumentRoot "/usr/local/www/apache24/data"

    <Directory "/usr/local/www/apache24/data">
        Require all granted
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        DirectoryIndex index.php
    </Directory>

    ErrorLog "/var/log/httpd/example.com-error_log"
    CustomLog "/var/log/httpd/example.com-access_log" common

    # Enable PHP
    <FilesMatch \.php$>
        SetHandler application/x-httpd-php
    </FilesMatch>

    # WordPress Rewrite Rules
    <IfModule mod_rewrite.c>
        RewriteEngine On
        RewriteBase /
        RewriteRule ^index\.php$ - [L]
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteRule . /index.php [L]
    </IfModule>
</VirtualHost>

リバースプロキシの設定

[編集]

Apache HTTP Serverをリバースプロキシとして使用する設定例です。

<VirtualHost *:80>
    ServerName www.example.com

    ProxyPreserveHost On
    ProxyPass / http://backend-server/
    ProxyPassReverse / http://backend-server/

    ErrorLog "/var/log/httpd/example.com-error_log"
    CustomLog "/var/log/httpd/example.com-access_log" common
</VirtualHost>

運用上のベストプラクティス

[編集]

バックアップとリストア

[編集]

定期的なバックアップを作成し、必要な場合に迅速にリストアできるようにします。

定期メンテナンス

[編集]

定期的なパッケージのアップデートとApache HTTP Serverのバージョン管理を行い、セキュリティを維持します。

セキュリティの確保

[編集]

前章で述べたセキュリティ設定を適用し、ファイアウォールなどの追加のセキュリティ対策を検討します。

まとめ

[編集]

この章では、実際の設定例と運用上のベストプラクティスについて紹介しました。これらの手法を活用することで、Apache HTTP Serverを安全に効率的に運用し、特定のアプリケーションや使用シナリオに最適化することができます。

附録

[編集]

この附録では、Apache HTTP Serverに関連する参考文献、オンラインリソース、コマンドリファレンス、FAQ、用語集などを提供します。これらの情報は、Apache HTTP Serverの理解を深めるための補足資料として役立ちます。

参考文献とリソース

[編集]
Wikipedia
Wikipedia
ウィキペディアApache HTTP Serverの記事があります。

Apache HTTP Serverに関するさまざまな参考文献やオンラインリソースがあります。以下はいくつかの推奨リソースです。

オンラインドキュメント

[編集]

Apache HTTP Serverの詳細なドキュメントは、公式サイトの以下のセクションで提供されています。

  • Apache HTTP Server Documentation: https://httpd.apache.org/docs/
    • 最新のモジュールや設定オプションに関する詳細な情報が含まれています。

コミュニティフォーラム

[編集]

Apache HTTP Serverに関する質問や討論を行うためのコミュニティフォーラムもあります。

コマンドリファレンス

[編集]

Apache HTTP Serverのコマンドリファレンスを参照することで、特定のコマンドや設定オプションの意味や使用方法を確認できます。

よく使うApacheコマンド一覧

[編集]

Apache HTTP Serverを管理する際によく使用されるコマンドの一覧です。

  • apachectl: Apache HTTP Serverの制御スクリプト
  • httpd: Apache HTTP Serverのメインバイナリ
  • htpasswd: パスワードファイルを生成および管理するためのユーティリティ
  • htdigest: ダイジェスト認証のためのユーティリティ