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サーバにアクセス。
以下の画面が表示されたら成功。

Webサーバ停止。

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

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

現在の仮想マシンのネットワーク設定はアダプタ1のNATとアダプタ2のホストオンリーアダプターである。
ホスト、ゲストの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の設定から、ネットワーク→アダプター1→高度→ポートフォワーディングで、以下のように設定する(名前は適当で、ホストポートはウェルノウンポート以外かつホストで使用していないポートであればよい)。

ゲストのファイアーウォールで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のブラウザの写真であるが、スマホでも同様に接続できた。)。

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

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