VirtualBox上のCentOSにApacheをインストール

VitrualBoxのCentOSにApacheをインストールした時の備忘録。


#環境
以下の記事でCentOSの基本設定をしたことを前提としている。
https://qiita.com/kazu_kazu/items/6e8dd09a5b0f641c3bf3

MacBook Pro (macOS Catalina バージョン10.15.6)
VirtualBox 6.1.14
CentOS 8.2
Apache 2.4.37

#Apacheインストール

以下の記事のとおりにインストール。
WEB ARCH LABO
「Apache httpd 2.4 を CentOS 7 に yum でインストールする手順」
https://weblabo.oscasierra.net/apache-installing-apache24-yum-centos7-1/

ソースからではなくyumでインストールする。
まず、パッケージの情報を表示してインストールするバージョンを確認する。

```
[test1@www ~]$ yum info httpd
CentOS-8 - AppStream                            4.8 kB/s | 4.3 kB     00:00    
CentOS-8 - Base                                  11 kB/s | 3.9 kB     00:00    
CentOS-8 - Extras                               4.4 kB/s | 1.5 kB     00:00    
利用可能なパッケージ
名前         : httpd
バージョン   : 2.4.37
リリース     : 21.module_el8.2.0+494+1df74eae
Arch         : x86_64
サイズ       : 1.7 M
ソース       : httpd-2.4.37-21.module_el8.2.0+494+1df74eae.src.rpm
リポジトリー : AppStream
概要         : Apache HTTP Server
URL          : https://httpd.apache.org/
ライセンス   : ASL 2.0
説明         : The Apache HTTP Server is a powerful, efficient, and extensible
             : web server.

```

次はインストール。

```
[test1@www ~]$ sudo yum -y install httpd
[test1@www ~]$ httpd -v
Server version: Apache/2.4.37 (centos)
Server built:   Sep 15 2020 15:41:16
```

#起動と停止確認

```
[test1@www ~]$ systemctl start httpd.service 
==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ====
'httpd.service'を開始するには認証が必要です。
Authenticating as: 
Password: 
==== AUTHENTICATION COMPLETE ====

[test1@www ~]$ systemctl status httpd.service 
● httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor pres>
   Active: active (running) since Sat 2020-10-24 16:57:35 JST; 45s ago
     Docs: man:httpd.service(8)
 Main PID: 33732 (httpd)
   Status: "Running, listening on: port 80"
    Tasks: 213 (limit: 4876)
   Memory: 20.9M
   CGroup: /system.slice/httpd.service
           ├─33732 /usr/sbin/httpd -DFOREGROUND
           ├─33737 /usr/sbin/httpd -DFOREGROUND
           ├─33738 /usr/sbin/httpd -DFOREGROUND
           ├─33739 /usr/sbin/httpd -DFOREGROUND
           └─33740 /usr/sbin/httpd -DFOREGROUND

```


ホストブラウザで`http://（ApacheをインストールしたゲストのIPアドレス）`を入力してWebサーバにアクセス。
以下の画面が表示されたら成功。

![スクリーンショット 2020-10-24 17.02.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/344711/06265a68-43b2-7034-f86d-c451d7cade65.png)

Webサーバ停止。

```
[test1@www ~]$ systemctl stop httpd.service 
==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ====
'httpd.service'を停止するには認証が必要です。
Authenticating as: 
Password: 
==== AUTHENTICATION COMPLETE ====
```

#ホストOS以外からのアクセスの有効化

現在の仮想マシンのネットワーク設定はアダプタ１のNATとアダプタ２のホストオンリーアダプターである。
ホスト、ゲストのIPアドレスの状態は以下のとおり。

| OS | インターフェース名 | IPv4アドレス |
|:-----------|:------------|:------------:|
| ゲスト       | enp0s3(NAT) | 10.0.2.15    |
| ゲスト     | enp0s8(ホストオンリーアダプタ)      | 192.168.56.10  |
| ホスト       | en0        | 192.168.0.4   |
| ホスト       | vboxnet0（ホストオンリーアダプタ）   | 192.168.56.1  |

ホスト→ゲストのWebサーバへのアクセスは、ホストオンリーアダプタにより簡単に実現できるが、ホスト以外で同一LAN内のアクセス（自分のスマホからゲストへのアクセスなど）はNAT経由でアクセスすることになる。
NATでゲストにアクセスするためには、ポートフォワーディングの設定を行う必要がある(NATは、デフォルトだとホストや他のコンピュータからアクセスできない設定になっている。)。

VMの設定から、ネットワーク→アダプター１→高度→ポートフォワーディングで、以下のように設定する（名前は適当で、ホストポートはウェルノウンポート以外かつホストで使用していないポートであればよい）。

![スクリーンショット 2020-10-24 21.00.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/344711/6895c97b-8891-8a91-7126-fb43c3688998.png)

ゲストのファイアーウォールでhttpを許可する。ホストオンリーアダプターが許可せずに接続できた理由は分からない。

```
[root@www ~]# firewall-cmd --add-service=http --permanent 
success
[root@www ~]# firewall-cmd --reload 
success
[root@www ~]# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: enp0s3 enp0s8
  sources: 
  services: cockpit dhcpv6-client http
  ports: 
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 

```

ゲストでWebサーバを起動した上で、スマホで接続を確認する（以下の写真はホストPCのブラウザの写真であるが、スマホでも同様に接続できた。）。

![スクリーンショット 2020-10-24 21.05.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/344711/3162676f-66b2-fd13-1659-8ec44db7e9da.png)

ブラウザに入力するIPv4アドレスはゲストのものではなく、ホストのIPv4アドレスとポートフォワーディングで設定したポート番号を入力する（前述したが、NATでは直接ゲストにアクセスできないため、ホスト経由で接続する。）。


NATやポートフォワーディングについては以下のユーザマニュアルを参考にした。
http://download.virtualbox.org/virtualbox/UserManual.pdf