はじめに
前回で環境構築およびホストOSからSSH接続ができるにようになったので当初の目的であって、好きに使って壊せる環境で遊んでいきたいと思います。
まず手始めに今回はApacheをインストールして、Webサーバ化してみたいと思います。
本記事のゴール
- CentOS 8.0にApacheをインストールする。
- VirtualBoxにポートフォワーディング設定を行う。
- ホストOSからアクセスする。
なお、本記事は VirtualBox + CentOS7 でApacheをインストール - HRR Co., Ltd.を参考にさせていただきました。
環境
- Windows 10 64bit
- VirtualBox 6.1.12
- Centos 8.2
- Apache 2.4.37
事前知識
Apacheとは
以下、Wikipediaからの参照
Apache HTTP Server(アパッチ エイチティーティーピー サーバ)は、Apache License2.0の条件でリリースさ>れるフリーでオープンソースのクロスプラットフォームのWebサーバソフトウェアである。Apache はApacheソフトウェア財団の支援のもと、開発者のオープンコミュニティによって開発・保守されている。
簡単にまとめると
- 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 8月 09 21:58:21 localhost.localdomain systemd[1]: Starting The Apache HTTP Server... 8月 09 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番ポートにアクセスするには、ポートフォワーディングの設定が必要になります。
- Oracle VM VirtualBoxマネージャーを開く。
- 仮想マシン上で右クリックをして、【設定】を開く。
- 【ネットワーク】→【高度(D)】→【ポートフォワーディング】をクリックする。
- 右上の+ボタンをクリックして、以下を設定する。
- 名前
- 任意の名前(今回はHTTP接続用とわかるようにするためにHTTPとする)
- プロトコル
- TCP
- ホスト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/にアクセスしてみる。
この画面が表示されれば無事にHTTP接続することが完了!!
念のためVirtualBoxからスナップショットを取っておくことをオススメします。
おわりに
今回も無事にゴールとしていたところまで完了です!
今回の手順通りにやっていれば恒久的な設定となっているので、VirtualBoxを再起動したとしてもブラウザからアクセスできるようになっています。
ただし、Webサーバ自体が停止している(VirtualBox上のLinuxが起動されていない)状態では、アクセスできないので注意してください。
次回はテストページ以外も表示されるようにしていきたいと思います。