Apache を homebrew でインストールして VirtualHost 立てたら混乱した件

備忘録。

## 何が起きたのか
### 1. Homebrew で apache をインストール。
```
$ brew install httpd
```

ちなみに MacOS 標準搭載の apache 使わなかった理由は[こちら](https://zenn.dev/megeton/articles/ba75098f1ba7d1)。 
標準搭載の apache が走ってるかの確認と stop 方法は[こちら](https://weblabo.oscasierra.net/apache-macos-install-homebrew/)。

### 2. とりあえず `httpd.conf` の Port を 80 に変える。
```
# Listen 8080
Listen 80
```
localhost:80 でちゃんと It Works! が表示されたことを確認。

### 3. [問題発生] VirtualHost を設定

今回 1 つの Web サーバーで 2 つのサブドメインが異なるウェブサイト (sample1.example.com と sample2.example.com) をホストしたかったので、VirtualHost を立てることに。

VirtualHost の設定は主に 3 ステップ。
1. 各ウェブサイトごとの DocumentRoot を新たに作成。
1. 各 DocumentRoot の中に表示したい HTML ファイルを格納。
1. VirtualHost の設定ファイルをいじいじ。

というわけで[こちらの記事](https://tech.mamezou00000.com/entry/apache-virtual-host)を参考に VirtualHost を設定することに。

VirtualHost の設定には、VirtualHost 設定用の `.conf`ファイルが必要らしく、`/opt/homebrew/etc/httpd/conf.d` というディレクトリ配下に格納するらしい。

のですが。。。

VirtualHost 設定に必要な `conf.d` のディレクトリが見つからない！！！！！！(泣)

というか消してもないんだけど。。。 `brew install httpd` しただけなのに。。。

```
$ cd /opt/homebrew/etc/httpd && ls
> extra		httpd.conf	magic		mime.types	original
```

こんな感じで、conf っぽいディレクトリはない。。。。

しかもグーグル先生に "conf.d 見当たらない" ググっても出てこない。。

#### しょうがないので Gemini 先生に聞くことに。

:raising_hand: 私:  "In my /opt/homebrew/etc/httpd directory, I don't see conf.d directory. what is wrong?"
:robot: Gemini 先生:  "**It's unusual not to see a conf.d directory** within your /opt/homebrew/etc/httpd directory, as this is the standard location for additional configuration files in Apache installations managed by Homebrew." 

そんなあ！！！！



とりま私がなんかやらかしたのかなあとか思い Gemini 先生が提案してくれた通り `brew reinstall httpd` したけどだめ。

#### httpd.conf をチェックしてみる

Gemini 先生:
"Open your main Apache configuration file (/opt/homebrew/etc/httpd/httpd.conf) and search for a line like IncludeOptional conf.d/*.conf. This line instructs Apache to include configuration files from the conf.d directory. If this line is missing or commented out, uncomment it or add it if necessary. If the line points to a different directory, that's where your additional configuration files might be located."

と言われたので確認するも、そもそも cmd+F で "conf.d" とやってもヒットしない。なんで？？？？

マニュアルで作ることも考えたけど、後でめんどくさい問題になりそうなのでなんとかデフォルトの設定で VirtualHost 作れないか模索した。

# 解決策
`httpd.conf` ファイルとにらめっこしたところ、こんな記載があった。
```
# Virtual hosts
# Include /opt/homebrew/etc/httpd/extra/httpd-vhosts.conf
```
ん！！！！なんかそれっぽい。

ぐぐってみたところ、どうやら通常 /httpd/conf.d に格納しているバーチャルホストの設定ファイルが、なぜか homebrew 版だとデフォルトで /extra/ パスに作成されてるっぽい。
(参考にした記事は[こちら](https://qiita.com/joh_luck/items/f3321ee81166aea0ff3b))


`httpd-vhosts.conf` を開くと、デフォルトでこんな感じで記載があった。

```
# <VirtualHost *:8080>
#     ServerAdmin webmaster@dummy-host.example.com
#     DocumentRoot "/opt/homebrew/opt/httpd/docs/dummy-host.example.com"
#     ServerName dummy-host.example.com
#     ServerAlias www.dummy-host.example.com
#     ErrorLog "/opt/homebrew/var/log/httpd/dummy-host.example.com-error_log"
#     CustomLog "/opt/homebrew/var/log/httpd/dummy-host.example.com-access_log" common
# </VirtualHost>

# <VirtualHost *:8080>
#     ServerAdmin webmaster@dummy-host2.example.com
#     DocumentRoot "/opt/homebrew/opt/httpd/docs/dummy-host2.example.com"
#     ServerName dummy-host2.example.com
#     ErrorLog "/opt/homebrew/var/log/httpd/dummy-host2.example.com-error_log"
#     CustomLog "/opt/homebrew/var/log/httpd/dummy-host2.example.com-access_log" common
# </VirtualHost>

```

ここいじったら行けそう！

# 結論
homebrew で apache をインストールした場合、VirtualHost の設定は`httpd-vhosts.conf`にて行い、
その設定ファイルを同期させるために `Include /opt/homebrew/etc/httpd/extra/httpd-vhosts.conf` の一文を `httpd.conf` にいれる必要があるということがわかりました！

# 実践

というわけで、早速 `httpd.conf` のこちらの行をコメントアウト。
```
# Virtual hosts
Include /opt/homebrew/etc/httpd/extra/httpd-vhosts.conf
```

んで、`httpd-vhosts.conf` の設定を変更。
```
<VirtualHost *:80>
    ServerAdmin webmaster@dummy-host.example.com
    DocumentRoot "/opt/homebrew/var/www/sample_host"
    ServerName sample1.example.com
   </VirtualHost>

<VirtualHost *:80>
    DocumentRoot "/opt/homebrew/var/www/sample_host2"
    ServerName sample2.example.com
   </VirtualHost>
```

そして忘れちゃいけない、localhost で試すので `/private/etc/hosts` を編集。

```
127.0.0.1 sample1.example.com
127.0.0.1 sample2.example.com
```

すると。。。

![Screenshot 2024-07-19 at 15.12.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3841583/c7024b6f-5b5b-7eea-e02d-21014326a5cb.png)
![Screenshot 2024-07-19 at 15.12.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3841583/d57da2fe-92e2-ffde-2f03-d01c38a9bb62.png)

やったあ！！！！

めっちゃググっても出てこない情報だったので、どなたかの役に立てば。
ご指摘あればいつでもお待ちしております！！！！