Apache HTTP サーバ使用設定ファイルの読み方、構造について

#はじめに
間違えなどあればご指摘ください。よろしくお願いします。:bow_tone1:
あとここでは設定ファイルの中の書き方というより書くためのヒントの探し方に重点を置いています。

<font color=red>**！！各モジュールの中に各ディレクトリがあり。！！**</font>

<font color=red>**！！必須モジュールは最初から入っている！！**</font>

<font color=red>**！！最初から入っているモジュールのディレクトリ構文でさらに必要なモジュールを入れてその中のディレクトリ構文を使う!!**</font>

見方などを詳しく説明する前に公式の大事そうURLの説明をここに乗せておきます。

[Apacheで使う設定ファイルについて](https://httpd.apache.org/docs/2.4/configuring.html)
[Apacheモジュールの説明に必要な必須用語について](https://httpd.apache.org/docs/2.4/mod/module-dict.html#Status)
[Apacheディレクティブの説明に必要な必須用語について](https://httpd.apache.org/docs/2.4/mod/directive-dict.html#Status)
[Apacheモジュール一覧](https://httpd.apache.org/docs/2.4/mod/)
[ディレクティブ クイックリファレンス](https://httpd.apache.org/docs/current/ja/mod/quickreference.html)

では説明を開始していきます！:hatched_chick:
よろしくお願いします！:hatched_chick:

#Apacheで使う設定ファイルについて
<img width="638" alt="スクリーンショット 2020-02-02 17.26.55.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133940/3a22b14a-8947-36d7-e686-753dba65ba79.png">
上記図のようにApacheでは、

- メインのファイル(httpd.confかapach2.confかとりあえずetcフォルダの中を調べて見つける)、
- メインのファイルに取り込むファイル、
- .htaccessといファイル

があると思っていただければ問題ないかと思います。
『メインのファイルに取り込むファイル』は結果的には『メインのファイル』に取り込まれます。

取り込み方は`Include メインのファイルに取り込むファイル`のように書きます。

あとファイル中記述方法は`ディレクティブ 引数`という形が基本です。『ディレクティブ』自体に書き方色々ありますが基本は`ディレクティブ 引数`という感じです。

:hatching_chick:『メインのファイル』は基本全体に適用だよね？じゃぁ.htaccessといファイルは？
:sun_with_face:.htaccessといファイルはそれが置かれているディレクトリとそのサブディレクトリに反映されるものみたいなんだ！
:hatching_chick:へ〜〜〜。じゃあ、.htaccessといファイルとか色々なところでみそうだね
:sun_with_face:そうだね
:hatching_chick:うふふっつ。
:sun_with_face:うふふっつ。
:sun_with_face:.htaccessといファイルはapachの再読み込みとかしなくても即反映みたいな感じで捉えて貰えばいいようだよ！
:hatching_chick:へ〜〜。

#Apacheのモジュールについて
上記ではモジュールについて話していません。あくまでファイルがあり、そこに`ディレクティブ 引数`という形で必要なものを記述していきますとだけ書きました。
しかしよくApacheと聞くとモジュールという言葉が出てきて？？になること多いと思ったのでここで少しお話させていただきます。

:carousel_horse:一度深呼吸をして、、、、、、、、、

モジュールとは拡張機能で、拡張機能とは追加機能です。
基本構成があり、追加機能を追加して作成されるのがApacheの構成スタイル。
追加機能も誰もが追加するだろうものはデフォルトで追加されています。
ただ必要な機能がない！！というときは必要なモジュールを追加するという作業が必要になるということです。

どう追加するか、、
[モジュールの追加(LoadModule ディレクティブ)](https://httpd.apache.org/docs/2.4/mod/mod_so.html#loadmodule)
[モジュールがあったら中の処理(\<IfModule> ディレクティブ)](https://httpd.apache.org/docs/2.4/mod/core.html#ifmodule)

追加して、さらにそのモジュールがあれば的な処理を書きます。
結局書くものは`ディレクティブ 引数`という感じのものですね。

ここのリンクに行くとさらに説明リンクなるものがあると思いますが簡単にこれについて説明させていただきます。

<img width="934" alt="スクリーンショット 2020-02-02 17.57.51.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133940/89736212-07bc-6eed-3f6f-1f5228cc3e11.png">


| 用語       |       簡単な説明 |    詳細記述箇所 |
|:-----------------|:------------------|:------------------|
| **〇〇ディレクト**           |              ディレクトの名前みたいな感じです。 |                |
| **説明**           |            このディレクトは何をするものなのかの説明。上記写真ではモジュールを追加するものですと書かれています。 |              |
|**構文**            |              書き方 |        [ディレクティブの解説に使われる用語(構文)](https://httpd.apache.org/docs/2.4/mod/directive-dict.html#Syntax)        |
| **コンテキスト**             |                どこでならこのディレクトを書いていいかというもの。カンマ区切りで書かれます。例えばここに.htaccessとだけ書かれていれば.htaccessにしかかけないということ、バーチャルホストだけ書かれていれば、\<VirtualHost> の中でしか使えないということになります。\<VirtualHost>自体もディレクトリなので、ディレクトリが入れ子になって書かれるということがわかると思います。もしこのディレクトリはどこに書くのだろうと迷ったらそのディレクティブの説明と、ディレクティブのコンテキストの欄を見るといいかもしれません。 |         [ディレクティブの解説に使われる用語(コンテキスト)](https://httpd.apache.org/docs/2.4/mod/directive-dict.html#Context)         |
| **ステータス**             |             ここのものは元々組み込まれ消せないものか、最初から含まれているが消せるものでもあるか、追加しないといけないものかといったことの説明です。 |       [ディレクティブの解説に使われる用語(ステータス)](https://httpd.apache.org/docs/2.4/mod/directive-dict.html#Status)       |
| **モジュール**          |           `これは単純にディレクティブが定義されているモジュールの名前を記載します`と書かれているため、ここに書いてあるモジュールが入っていればこのディレクトリが使えるということがわかります


#Apacheのモジュールどんなものがあるか？
[Apacheモジュール一覧](https://httpd.apache.org/docs/2.4/mod/)

#簡単な復習
- Apacheには元々含まれているモジュールと含まれていないモジュールがあり、含まれていないものは自分で含む必要あり。

- 何かディレクトリを使いたいときはそのモジュールがあればそのまま使える場所で使い、なければモジュールを入れてからディレクトリを使う必要あり。

- IfModuleって書いてあったらその次にあるモジュール名をまず検索すると何をしようとしているのかがわかる。[Apacheモジュール一覧](https://httpd.apache.org/docs/2.4/mod/)

#最後に
終わりです！:dancer_tone5:
今度はもっと使う部分ほりこめた記事かけたらいいなと思いました！