これは apache ( httpd )の問題というよりも、Linuxの「ディストリビューション」の意味を理解することが必要な内容です。
ここでの「ディストリビューション」は「OS本体(kernel) + よく使うソフトウェアのパッケージをまとめて提供するもの」と整理します。
「Ubuntu」とか「CentOS」、「Debian」「Red Hat Enterprise」などのことです。
回答を先にすると、
- ディストリビューションごとの流儀の違いであり、考察1、考察2 いずれもその通りです
- apache httpd を特にオプションを指定せずに起動した場合、以下の設定ファイルが読み込まれるように指定された状態でパッケージされています。
-- Ubuntu(Debian)系のパッケージの場合 /etc/apache2/apache2.conf
-- CentOS(RHEL)系のパッケージの場合 /etc/httpd/conf/httpd.conf
- 設定ファイルの位置は起動スクリプトにオプションを渡すことで任意に変更可能です。
起点となる設定ファイル内で、その後読み込むファイルが指定されています。
つまり、読み込ませたいファイルのパスは任意に変更可能です。
※一度はデフォルトの設定ファイルを眺めて何が指定されているかたどってみるのがおすすめです。
また
Docker-composeで起動したコンテナはデフォルトでubuntuサーバーとなっているのでしょうか
については Dockerのコンテナ内で使われるOSについて あたりを参照されてはいかがでしょうか。
ディストリビューションとパッケージの関係について
各ディストリビューションで提供されるソフトウェアパッケージ(yum や aptなどでインストールするもの)はOSSで公開されているそのものではなく、そのディストリビューションの設計ポリシーに従ってカスタマイズや初期設定をした状態のものが提供されています。
例えば
- 実行ファイル名(Ubuntu/Debian系の場合 apache2 、 CentOS/RHEL系の場合 httpd とか)
- 設定ファイルの配置
- それらを前提とした起動スクリプト
などがパッケージのポリシーによって決め打ちで設定されています。
つまり「Ubuntu版のapache httpd」「CentOS版のapache httpd」といった状態になっています。
これは「こうでなければならない」といったものではなくパッケージのデフォルト設定がそうなっているというものなので、自分流の設定ファイル構成を決めてその構成で整合性が取れるように起動スクリプトやデフォルト設定の上書きをする、といったことをすれば構わないものです。
例) CentOS の httpd の起動スクリプト
例えばCentOSのhttpdの場合、起動スクリプトは /usr/lib/systemd/system/httpd.service に以下のように作成されています。
(抜粋)
[Service]
Type=notify
EnvironmentFile=/etc/sysconfig/httpd
ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND
(抜粋)
つまり、 /etc/sysconfig/httpd というファイルを作り環境変数 OPTIONS を定義しておくことで起動時の設定を変えることができます。
例えば /etc/sysconfig/httpd に
OPTIONS="-f /etc/custom/httpd.conf"
などと定義すれば、 httpd は /usr/sbin/httpd -f /etc/custom/httpd.conf -DFOREGROUND
として起動されることになり読み込まれる設定ファイルは /etc/custom/httpd.conf になります。
つまり「特に何も指定しないで起動した場合の動作」がディストリビューションごとのポリシーに応じて設定されており、それが設定ファイルの場所の違いにつながる、ということになります。
補足: ソースからインストールした場合との関連
何かOSSのアプリケーションをソースインストールしたことがあれば理解できると思いますが、OSSで提供されているソフトウェアは多くの場合、
- 実行環境やディレクトリ構成、ライブラリのパスなどに合わせてソースの設定をおこなう
- コンパイル(実行形式のファイルを生成する)
- 設定したとおりのパス構成にファイルを配置する
という手順で利用可能な状態となります。
1.はconfigure というスクリプトが提供されていることが多いです。
2.は make コマンド 3. は make install コマンドで行うことが多いです。
1.により、実行ファイル名やプログラム起動時に読み込む設定ファイルのパスなども指定されることになります。
依存するライブラリのありか(パス)なども指定されます。
この部分がディストリビューションのポリシーによって設定されています。
余談: Ubuntu/Debian系での設定について
/etc/apache2/sites-enabled/000-default.conf
ですが、Ubuntu/Debian系での流儀という意味では
- /etc/apache2/sites-available/ 以下にバーチャルホストごとにファイルを分けて設置
- /etc/apache2/sites-enabled/ 以下に現在有効(起動させる)バーチャルホストの設定ファイルを /etc/apache2/sites-available/ 以下へのシンボリックリンクなどで配置
とするようなイメージとなっています。
これは例えば、メンテナンス時の設定と通常運用時の設定を書き換えて運用する、といった場合に有効で、事前に必要なファイルを sites-available 以下に準備しておき、運用の切り替え時に sites-enabled 内のリンク先を変更する、といった手順とすることができます。
変更履歴などを残しながら進めるにも楽です。
参照) Qiita: UbuntuのApache設定ファイル、どうやるんだっけ?
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。