Webサーバーとモジュール

## はじめに

セキュアDNSサーバー構築が終わり、WEBサーバー構築着手している最中で一つ気づきがあったのでメモ。
DNS構築ではBIND利用したが、モジュールについて一切触れてこなかった。
しかしWebサーバーでは、設定ファイル内でモジュールを有効or無効の設定がとても多いなと印象を受けた。

モジュールに関しての知識も曖昧だったので簡単にメモにした。


## モジュールとは

ある機能を実現するひとまとまりの部品のこと。
今回WEBサーバー構築に利用したApacheは、必要最低限な機能だけをコアに据えて、残りは選択可能と
するモジュール構造を採用している。
モジュールとは、ある機能を実現するためのソフトウェアで、プログラム本体に組み込んだり、
交換することが可能な小さなプログラムのこと。


以下参照
http://cos.linux-dvr.biz/archives/20

## 情的モジュールとDSOモジュール

Webサーバーの多くの機能は、モジュールによって実現される。
モジュールはApacheの設定ファイルを編集することで、簡単に有効／無効を切り替えることができます

Apacheに利用したい機能のモジュールを追加する方法は次の2通り。
①静的モジュール：Apacheをビルドするときに実行ファイルの中にモジュールを組み込む
②DSO(Dynamic Shared Object)モジュール：モジュールを単独ファイルとして作成し、
Apacheの起動時に動的に追加する。

今回は②のDSO(Dynamic Shared Object)モジュールを利用し、機能追加をする。（参照だけにした）


## DSO(Dynamic Shared Object)モジュールによるモジュール機能有効化

設定ファイルからそれぞれのモジュールに行き付く方法は以下の通り。

まずApacheの設定ファイル`/etc/httpd/conf/httpd.conf`内で。どこにモジュールのファイルがあるか調べる。

```:/etc/httpd/conf/httpd.conf
 48 # Dynamic Shared Object (DSO) Support
 49 #
 50 # To be able to use the functionality of a module which was built as a DSO you
 51 # have to place corresponding `LoadModule' lines at this location so the
 52 # directives contained in it are actually available _before_ they are used.
 53 # Statically compiled modules (those listed by `httpd -l') do not need
 54 # to be loaded here.
 55 #
 56 # Example:
 57 # LoadModule foo_module modules/mod_foo.so
 58 #
 59 Include conf.modules.d/*.conf

```

59行目、`Include conf.modules.d/*.conf`で
Apacheで動的モジュールを利用したい場合、`conf.modules.d'ディレクトリ内にconfファイルを置きましょうと書いてある。 このパスはフルパスではない。

```
 25 # ServerRoot: The top of the directory tree under which the server's
 26 # configuration, error, and log files are kept.
 33 #
 34 ServerRoot "/etc/httpd"
```
全てのデーモンの設定ファイル上部に必ずそのデーモンの設定ファイル・エラー・ログファイルが格納されてる
「The top of the directory tree」が記述されている。
今回は34行目の`/etc/httpd`からモジュールについての設定ファイルのフルパスがわかる。

`/etc/httpd/conf.modules.d/*.conf`

```
[root@sv ~]# ls -l  /etc/httpd/conf.modules.d/
合計 52
-rw-r--r--. 1 root root 3311 11月 16 16:31 00-base.conf
-rw-r--r--. 1 root root  139 11月  8 20:29 00-dav.conf
-rw-r--r--. 1 root root   41 11月  8 20:29 00-lua.conf
-rw-r--r--. 1 root root  948 11月  8 20:29 00-mpm.conf
-rw-r--r--. 1 root root  787 11月  8 20:29 00-optional.conf
-rw-r--r--. 1 root root 1073 11月  8 20:29 00-proxy.conf
-rw-r--r--. 1 root root   41 11月  8 20:29 00-ssl.conf
-rw-r--r--. 1 root root   88 11月  8 20:29 00-systemd.conf
-rw-r--r--. 1 root root  451 11月  8 20:29 01-cgi.conf
-rw-r--r--. 1 root root   45  5月 19  2021 10-fcgid.conf
-rw-r--r--. 1 root root   45  5月 11  2022 10-h2.conf
-rw-r--r--. 1 root root   57  5月 11  2022 10-proxy_h2.conf
-rw-r--r--. 1 root root  496 11月  8 20:31 README
```

同ディレクトリー配下を確認すると、apacheモジュールに関する設定ファイルがたくさんある。

試しにその一つのファイルを確認する。

```:/etc/httpd/conf.modules.d/00-base.conf
  1 #
  2 # This file loads most of the modules included with the Apache HTTP
  3 # Server itself.
  4 #
  5 
  6 LoadModule access_compat_module modules/mod_access_compat.so
  7 LoadModule actions_module modules/mod_actions.so
  8 LoadModule alias_module modules/mod_alias.so
  9 LoadModule allowmethods_module modules/mod_allowmethods.so
 10 LoadModule auth_basic_module modules/mod_auth_basic.so
 11 LoadModule auth_digest_module modules/mod_auth_digest.so
 12 LoadModule authn_anon_module modules/mod_authn_anon.so
 13 LoadModule authn_core_module modules/mod_authn_core.so
 14 LoadModule authn_dbd_module modules/mod_authn_dbd.so
 15 LoadModule authn_dbm_module modules/mod_authn_dbm.so
 16 LoadModule authn_file_module modules/mod_authn_file.so
 17 LoadModule authn_socache_module modules/mod_authn_socache.so
 18 LoadModule authz_core_module modules/mod_authz_core.so
 19 LoadModule authz_dbd_module modules/mod_authz_dbd.so
 20 LoadModule authz_dbm_module modules/mod_authz_dbm.so
 21 LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
 22 LoadModule authz_host_module modules/mod_authz_host.so
 23 LoadModule authz_owner_module modules/mod_authz_owner.so
 24 LoadModule authz_user_module modules/mod_authz_user.so
 25 LoadModule autoindex_module modules/mod_autoindex.so
 26 LoadModule brotli_module modules/mod_brotli.so
 27 LoadModule cache_module modules/mod_cache.so
 28 LoadModule cache_disk_module modules/mod_cache_disk.so
 29 LoadModule cache_socache_module modules/mod_cache_socache.so

```
各行がそれぞれのモジュール（機能）であり、追加したい場合はLoadModuleをつけ（デフォルトのまま）、
無効にしたい場合にはコメントアウトする。

例えば、64行目は一般ユーザのディレクトリの公開ディレクトリにするモジュール。
これを無効にするためにはコメントアウトする

昔のApacheはメインの設定ファイル`/etc/httpd/conf/httpd.conf`に これらのLoadするModuleが
全て詰められていて可読性が悪かったらしい。