しがないPGの自衛記録

基本ずっと寝てる

VirtualBox上のLinux環境をWebサーバ化してみる

f:id:ashitaka1963:20200810141801p:plain

はじめに

前回で環境構築およびホストOSからSSH接続ができるにようになったので当初の目的であって、好きに使って壊せる環境で遊んでいきたいと思います。

まず手始めに今回はApacheをインストールして、Webサーバ化してみたいと思います。

目次

本記事のゴール

  • CentOS 8.0にApacheをインストールする。
  • VirtualBoxにポートフォワーディング設定を行う。
  • ホストOSからアクセスする。

なお、本記事は VirtualBox + CentOS7 でApacheをインストール - HRR Co., Ltd.を参考にさせていただきました。

環境

事前知識

Apacheとは

以下、Wikipediaからの参照

Apache HTTP Server(アパッチ エイチティーティーピー サーバ)は、Apache License2.0の条件でリリースさ>れるフリーでオープンソースクロスプラットフォームのWebサーバソフトウェアである。ApacheApacheソフトウェア財団の支援のもと、開発者のオープンコミュニティによって開発・保守されている。

簡単にまとめると

  • Webサーバ用のオープンソースのソフトウェア
  • 世界中で高いシェアを誇っている人気ソフト。
  • 正式名称は、Apache HTTP Server

同様のソフトウェアとして、以下があるので名前を聞いたときにはApacheと似たようなものね。ってふんわり紐づけしておく。

  • IIS(Internet Information Services)
  • nginx(エンジンエックスと読むみたい。初見では読めね~)
  • GoogleWebServer

Webサーバ化構築手順

CentOS 8.0にApacheをインストールする

RLoginでホストOSからゲストOSにSSH接続し、root権限に昇格します。

[ashitaka@localhost ~]$sudo su -

パッケージ管理システムであるyumを使用してインストールします。 全てyesで回答で良いのでオプション-yを付けています。

なお、apacheじゃなくてhttpdインストールしてない?って感じになりそうですが、Linuxでインストールする際の名称はhttpdみたい。

[root@localhost ~]# yum install httpd -y

完了しました!と表示されたらインストールは完了です。

念のためバージョンを確認するコマンドを実行してみます。

[root@localhost ~]# httpd -version
Server version: Apache/2.4.37 (centos)
Server built:   Jun  8 2020 20:14:33

Apacheのバージョン2.4.37でインストールされていることが確認できます。

Apacheの起動設定

インストールした直後のApacheは起動されていません。 systemctlはサービスの起動や停止などを出来るコマンドでstatusは状態を確認するコマンドです。

[root@localhost ~]# systemctl status httpd
● httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
   Active: inactive (dead)
     Docs: man:httpd.service(8)

なので、まずサービスを起動して状態を確認してみます。

[root@localhost ~]# systemctl start httpd
[root@localhost ~]# systemctl status httpd
● httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
   Active: active (running) since Sun 2020-08-09 21:58:21 EDT; 19s ago
     Docs: man:httpd.service(8)
 Main PID: 30954 (httpd)
   Status: "Running, listening on: port 80"
    Tasks: 213 (limit: 11324)
   Memory: 25.0M
   CGroup: /system.slice/httpd.service
           ├─30954 /usr/sbin/httpd -DFOREGROUND
           ├─30955 /usr/sbin/httpd -DFOREGROUND
           ├─30956 /usr/sbin/httpd -DFOREGROUND
           ├─30957 /usr/sbin/httpd -DFOREGROUND
           └─30960 /usr/sbin/httpd -DFOREGROUND

 809 21:58:21 localhost.localdomain systemd[1]: Starting The Apache HTTP Server...
 809 21:58:21 localhost.localdomain httpd[30954]: AH00558: httpd: Could not reliably determine the server's fu>
 8月 09 21:58:21 localhost.localdomain systemd[1]: Started The Apache HTTP Server.
 8月 09 21:58:21 localhost.localdomain httpd[30954]: Server configured, listening on: port 80

Activeの項目がactiveとなっていれば、起動完了です。

試しにゲストOS側で自身の80番ポートにcurlコマンドを使用してアクセスできるか試してみます。

[root@localhost ~]# curl http://localhost
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE HTML>
<html lang="en">
  <head>
    <title>CentOS 提供的 Apache HTTP 服务器测试页</title>
    <meta charset="utf-8"/>
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"/>
    <link rel="shortcut icon" href="http://www.centos.org/favicon.ico"/>
    <link rel="stylesheet" media="all" href="noindex/common/css/bootstrap.min.css"/>
    <link rel="stylesheet" media="all" href="noindex/common/css/styles.css"/>
  </head>
  <body>
    # 省略
  </body>
</html>

文字化けしている部分もありますが、無事にレスポンスがあることが確認できます。

一応、apche起動していなければ以下のような返答が返ってきます。

[root@localhost ~]# curl http://localhost
curl: (7) Failed to connect to localhost port 80: 接続を拒否されました

VirtualBoxのポートフォワーディング設定(NATの場合)

続いて、ホストOS側からゲストOSの80番ポートにアクセスしてみます。

SSH接続のときと同様に、ホストOS側からゲスト側のHTTP接続用の80番ポートにアクセスするには、ポートフォワーディングの設定が必要になります。

  1. Oracle VM VirtualBoxマネージャーを開く。
  2. 仮想マシン上で右クリックをして、【設定】を開く。
  3. 【ネットワーク】→【高度(D)】→【ポートフォワーディング】をクリックする。
  4. 右上の+ボタンをクリックして、以下を設定する。

f:id:ashitaka1963:20200810141250p:plain

  • 名前
    • 任意の名前(今回はHTTP接続用とわかるようにするためにHTTPとする)
  • プロトコル
  • ホストIP
    • (空白)
  • ホストポート
    • 任意の数字(今回は8080)
  • ゲストIP
    • (空白)
  • ホストポート
    • 80(sshのポート番号)

以上の設定を有効にするために、仮想マシンの再起動を行う。

ホストOSからゲストOSにHTTPアクセスする

よし、これでapcheの起動も完了して、ポートフォワーディングの設定も有効にしたし、ブラウザからhttp://localhost:8080/にアクセスしてみる。 ポートはポートフォワーディングで設定した8080を指定する。

が、いつまでたっても返答が返ってこない。。。。

まあ、こうなることは想定済みで、原因は2つあるので次で説明していきます。

原因その1:Apache自動起動設定

結論から言うと、Apacheが起動されていないことが1つめの原因です。 というのも、ポートフォワーディングの設定を行った際に再起動もしたため、Apacheが停止されている状態になっています。

解決策として、毎回systemctl start httpdをコマンドで叩いてもいいけどそれはさすがに面倒くさいので、自動起動設定を行う。

[root@localhost ~]# systemctl enable httpd

これをしておくだけで、Linuxの起動時にApache自動起動されるようになる。

原因その2:ファイアウォールの設定

ファイアウォールのサービスであるfirewalldがデフォルトで起動されており、それが原因でホストOSから80番ポートへのアクセスがブロックされてしまっている。

なので、以下コマンドで80番ポートへのアクセスを許可します。

# ポートの追加
# --permanent       : 恒久設定(これを指定しないと再起動時のこの設定が消えてしまう。)
# --zone=public     : ゾーン設定(要確認)
# --add-port=80/tcp :  tcp接続による80番ポート接続を許可
[root@localhost ~]# firewall-cmd --zone=public --add-port=80/tcp --permanent
success
# 設定の反映
[root@localhost ~]# firewall-cmd --reload
success

再挑戦

再び、ホストOSのブラウザからhttp://localhost:8080/にアクセスしてみる。

f:id:ashitaka1963:20200810141535p:plain

この画面が表示されれば無事にHTTP接続することが完了!!

念のためVirtualBoxからスナップショットを取っておくことをオススメします。

おわりに

今回も無事にゴールとしていたところまで完了です!

今回の手順通りにやっていれば恒久的な設定となっているので、VirtualBoxを再起動したとしてもブラウザからアクセスできるようになっています。

ただし、Webサーバ自体が停止している(VirtualBox上のLinuxが起動されていない)状態では、アクセスできないので注意してください。

次回はテストページ以外も表示されるようにしていきたいと思います。

参考サイト