VirtualBoxでCentOS上のApacheでリバースプロキシしてHTMLを書き換えてHello WorldをCrazy Worldにする

#はじめに
[VirtualBoxでUbunts上のnginxでリバースプロキシしてHTMLを書き換えてHello WorldをCrazy Worldにする](https://qiita.com/the1031hiroto/items/33a68f28e80f72c9091b)のApacheバージョンです。
VirtualBox初心者なのでそっちの手順もメモです。
[「ApacheでリバースプロキシしてHTMLを書き換え」はここからです。]()
# Virtualboxで新規作成
![2019-09-12 (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/268079/26608313-aa6b-b29b-31be-8407de4c56d6.png)
# 適当に名前をつける
![2019-09-12 (3).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/268079/b2ea92d0-899d-ff46-514b-2a838384564f.png)
# あとはデフォルトのまま次へを連打
# ネットワークアダプター１でポートフォワーディング
![2019-09-12 (5).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/268079/b6de3830-97aa-ca90-a1f4-efec28aba6ec.png)
![2019-09-12 (6).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/268079/f1ab5ab7-3d8c-2db3-e30e-17a2b8e255ad.png)
# ネットワークアダプター２を有効にしてHost-Onlyを選ぶ
![2019-09-12 (4).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/268079/deb9903c-903f-509a-2c87-963a319e99d3.png)
# ストレージにCentoosを選択
[CentOSダウンロード元](https://www.centos.org/download/mirrors/)
![2019-09-12 (7).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/268079/3c3c847f-dbe8-7bdf-4c16-2d765c337d49.png)
![2019-09-12 (9).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/268079/c9e293ec-f070-7735-871d-11a95e43654b.png)
# 起動してInstallする
![2019-09-12 (10).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/268079/2402992f-cb74-e3c3-9f4e-1e4879a729a3.png)
# 日本語を選択（左下の検索ボックスに「J」を入力ですぐ出る）
![2019-09-12 (13).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/268079/968c1305-ff74-1aeb-a22a-c2b808747f19.png)
![2019-09-12 (18).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/268079/77277eb2-83f2-83ed-0274-c7acb61d4a0e.png)
# インストール先を選択
![2019-09-12 (15).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/268079/fac662ad-0cd5-f372-0170-e50b9cd96375.png)
# ネットワークON(emp0s3とemp0s8両方）
![2019-09-12 (19).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/268079/6a14a28f-3a90-6777-fe3d-1e32ee09fe07.png)
# ユーザーとパスワードを作成
![2019-09-12 (17).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/268079/ba8e60c7-18e9-7f5b-676c-3bf75b06ea45.png)
![2019-09-12 (16).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/268079/9025b164-8164-bf08-a487-f08ca5457f12.png)
# インストールが終わったら再起動
![2019-09-12 (21).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/268079/3762bf3d-ea54-9896-0847-543daa5a3b22.png)
# emp0s8のIPにrloginで接続
![2019-09-12 (22).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/268079/97da1c8f-d6d0-d589-cbb8-30d0f50b0186.png)
![2019-09-12 (23).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/268079/2054db78-b4ae-eb15-388a-5452fc26b501.png)
# enp0s8が有効になっていない場合
```
nmcli connection modify enp0s8 autoconnect yes
```
# yumプロキシ設定（もしプロキシがあれば）

```
[root@localhost ~]# vi /etc/yum.conf
```
```/etc/yum.conf
proxy=http:/hoge.co.jp:18080
#http:/hoge.co.jp:18080は自分の環境に合わせて変更してください
```
![2019-09-12 (24).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/268079/9bd5b45d-ad07-a1c1-c92d-08a211587c63.png)
# httpdをインストールして起動
```
[root@localhost ~]# yum install httpd
[root@localhost ~]# systemctl start httpd.service
```
# firewalの80番ポートをオープン
```
[root@localhost ~]# firewall-cmd --add-service=http --permanent
[root@localhost ~]# firewall-cmd --reload

/usr/sbin/setsebool httpd_can_network_connect true
```
# アクセスしてみる
![2019-09-13 (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/268079/45d1e2dc-5878-c76f-d7b7-ab1a183c9737.png)
# ホストOSのフォルダを共有
[VirtualBoxで共有フォルダを作ってゲストOSとファイル共有する](http://itemy.net/?p=1355)
# マウントしたディレクトリの権限グループ(vboxsf)にapacheの実行ユーザー(apache)を追加
```
[root@localhost ~]# gpasswd -a apache vboxsf
[root@localhost ~]# systemctl restart httpd.service
```
# ApacheのDocumentRootにさっきマウントしたディレクトリを設定
```
[root@localhost ~]# vi /etc/httpd/conf/httpd.conf
```
```/etc/httpd/conf/httpd.conf
# DocumentRoot "/var/www/html"
DocumentRoot "/media/sf_extendedui/"
・・・
# <Directory "/var/www/html">
<Directory "/media/sf_extendedui/">
Options Indexes FollowSymLinks
・・・
</Directory>
```
```
[root@localhost ~]# systemctl restart httpd.service
```
# SELinuxが有効な場合は無効にする
```
[root@localhost ~]# vi /etc/selinux/config
```

```/etc/selinux/config
SELINUX=disabled     ← enforcing から disabled に変更
```
```
[root@localhost ~]# shutdown -r now
```
# Apacheのモジュール設定（置換機能有効化）
```
[root@localhost ~]# vi /etc/httpd/conf.modules.d/00-base.conf
```
```/etc/httpd/conf.modules.d/00-base.conf
#LoadModule request_module modules/mod_request.so
LoadModule sed_module modules/mod_sed.so
#LoadModule speling_module modules/mod_speling.so
```
# リバースプロキシとHTML書き換え設定
[http://localhost:8080/hello/](http://localhost:8080/hello/)にアクセスされたら[http://localhost:3000/world/](http://localhost:3000/world/)のHTMLを表示する
OutputSed "s/[置き換え元の文字列]/[置き換えたい文字列]/g"

```
[root@localhost ~]# vi /etc/httpd/conf.d/rproxy.conf
```
```/etc/httpd/conf.d/rproxy.conf
<IfModule mod_proxy.c>
    ProxyRequests Off
    <Proxy *>
        Require all granted
    </Proxy>
    <VirtualHost _default_:80>
        ServerName localhost:8080
        ProxyPass /hello http://localhost:3000/world/
        ProxyPassReverse /hello http://localhost:3000/world/

        <LocationMatch /.*(/.+)*>
            AddOutputFilterByType Sed text/html php asp jsp
            OutputSed "s/Hello/Crazy/g"
        </LocationMatch>
    </VirtualHost>
</IfModule>

```
# nodejsをインストール
```
[root@localhost ~]# yum install epel-release
[root@localhost ~]# yum install nodejs npm
```
# firewalの3000番ポートをオープン
```
[root@localhost ~]# firewall-cmd --zone=public --add-port=3000/tcp --permanent
[root@localhost ~]# firewall-cmd --reload
```
# nodeで立ち上げるHTMLを準備

```html:hello.html
<!DOCTYPE html>
<html>
    <head>
        <title>Hello World</title>
    </head>
    <body>
        <h1>Hello World</h1>
    </body>
</html>
```


```javascript:hello.js
const http = require('http');
const fs = require('fs');

const hostname = '127.0.0.1';
const port = 3000;

const server = http.createServer((req, res) => {
  res.statusCode = 200;
  // res.setHeader('Content-Type', 'text/plain');
  // res.end('Hello World!\n');
  fs.readFile('hello.html','UTF-8',
  (error, data)=>{
    res.writeHead(200,{'Content-Type':'text/html'});
    res.write(data);
    res.end();
  });
});

server.listen(port, hostname, () => {
  console.log(`Server running at http://${hostname}:${port}/`);
});
```
# nodeで立ち上げて[http://localhost:8080/hello](http://localhost:8080/hello)にアクセス
```
[root@localhost ~]# node hello.js
Server running at http://127.0.0.1:3000/
```


# Dockerでやりたい