今回は拡張モジュールを用いてFreeBSDに機能を追加していきましょう。
Apacheには初期状態から多くのモジュールがインストールされています。
- ユーザ認証
- アクセス制限
- HTTPSプロトコルの実装
- Proxy機能
- ログ
などなど・・・
現状の確認
まずは現状でどれだけのモジュールが既に組み込まれているのか確認して見ましょう。
httpdコマンドに「-M」オプションを付けると組み込まれているモジュールを一覧表示できます。モジュール名の横に付いている(static/shared)はモジュールタイプを示しており、
「static」は静的リンクを使用しており、Apacheのインストール時から組み込まれているものです。「shared」は動的リンクを使用しており、必要に応じて組み込むことのできるモジュールです。
$ su ←まずはスーパーユーザになって下さい
# httpd -M
Loaded Modules:
core_module (static)
so_module (static)
http_module (static)
...
logio_module (shared)
socache_shmcb_module (shared)
静的なものは切り離し・組み込みの際にApacheを再インストールする必要があります。
一方、動的なものは設定ファイルで簡単に有効 / 無効を切り替えることができます。
mod_statusの利用
では、簡単にモジュールを追加して見ましょう。
まずhttpd.confを編集します
# vim /usr/local/etc/apache24/httpd.conf
↓httpd.conf↓
#Server configuration
ServerRoot "/usr/local"
Listen 80
#LoadModule mpm_event_module libexec/apache24/mod_mpm_event.so
LoadModule mpm_prefork_module libexec/apache24/mod_mpm_prefork.so
...ずっと続きます。変更点は以下です。
(「#」はコメントアウト)
LoadModule status_module libexec/apache24/mod_status.so
コメントアウトを外す
status_moduleとういモジュールをロードしてくれます
ExtendedStatus On
追加情報を表示
<Location /server-status>
SetHandler server-status
Order Deny,Allow
Deny from all
Allow from 192.168.56.1 ←192.168.56.1からのみ見られるように設定
</Location>
これらは追記して下さい
設定完了後、apachectlを用いてApacheを再起動を行い、アクセスを許可されたクライアントから**「http://サーバ名/server-status」**に接続します。
以下のようなページが表示されたら成功です。
またURLに「?auto」に付加した**「http://ホスト名/server-status?auto」**を指定することで文字列としてサーバステータスを取得できます。
ログの設定
ではいよいよログについてやっていきます。**「カスタムログ」**を用いることで、URL参照元やクライアント情報などをログ出力に加えることができます。
それでは先ほどと同様にhttpd.confを編集していきます。
# vim /usr/local/etc/apache24/httpd.conf
↓httpd.conf↓
#Server configuration
ServerRoot "/usr/local"
Listen 80
#LoadModule mpm_event_module libexec/apache24/mod_mpm_event.so
LoadModule mpm_prefork_module libexec/apache24/mod_mpm_prefork.so
...ずっと続きます。変更点は以下です。
#以下の2行のコメントアウトを外して下さい
LoadModule log_config_module libexec/apache24/mod_log_config.so ←ログを拡張できる
LoadModule logio_module libexec/apache24/mod_logio.so
#エラーログの設定
ErrorLog "/var/log/httpd-error.log" ←エラーログの出力先の設定
LogLevel warn ←ログレベルの設定
#カスタムログの設定
<IfModule log_config_module>
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined ←ログフォーマット「combined」の定義
LogFormat "%h %l %u %t \"%r\" %>s %b" common ← ログフォーマット「common」の定義
<IfModule logio_module>
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio ←ログフォーマット「combinedio」の定義
</IfModule>
CustomLog "/var/log/httpd-access.log" common ←/var/log/httpd-access.logにcommonのフォーマットに従って記述する
</IfModule>
まあ外と繋がっていないのでアクセスは自分だけです。笑
以上で今回は終了です。