Oracle Linux 8にApache HTTP ServerとWildflyを構築

# !!NOTICE!!
この記事の内容は、ほかの手順とまとめて以下の記事に転記しました。
今後は転記先をメンテするためそちらを見てください。

[【証明書自動更新対応版】Oracle CloudとCloudflareとLet's Encryptでつくる！HSTSプリロード対応APサーバクラスタ](https://qiita.com/syakesalmon/items/4639defa14b408121f5c)

# この記事の概要
OCIインスタンス上Oracle Linux 8にApache HTTP ServerとWildfly（JBossAS）をインストールする。

# 前提
- OS: Red Hat Enterprise Linux release 8.2 (Ootpa)
- Java: openjdk version "1.8.0_265"
- Apache HTTP Server: Apache/2.4.37 (Oracle Linux)
- Wildfly: Release: 12.0.3.Final
- 断りがない場合コマンドは```root```ユーザで実行しています

# Wildflyの構築
## 1. JDKのインストール

```
yum install -y java-1.8.0-openjdk.x86_64
```

## 2. wildflyユーザの作成

```
groupadd -r wildfly
useradd -r -g wildfly -d /opt/wildfly -s /sbin/nologin wildfly
```

## 3. WildflyのDL＆展開
wgetするURLは適宜お好みで。

```
cd /opt
wget https://download.jboss.org/wildfly/20.0.1.Final/wildfly-20.0.1.Final.zip
unzip -q wildfly-20.0.1.Final.zip
ln -s wildfly-20.0.1.Final wildfly
```

## 4. Wildfly起動確認

```
sh /opt/wildfly/bin/standalone.sh

2020-09-15 09:47:48,958 INFO  [org.jboss.as] (Controller Boot Thread) WFLYSRV0025: WildFly Full 20.0.1.Final (WildFly Core 12.0.3.Final) started in 13956ms - Started 314 of 580 services (370 services are lazy, passive or on-demand)
```

無事起動したようです。Ctrl+Cで停止します。

## 5. systemdデーモン起動させる
デーモン起動用のスクリプトはすでに用意されているので配置するだけですぐにデーモン起動できるようになります。

```
mkdir -p /etc/wildfly
cp /opt/wildfly/docs/contrib/scripts/systemd/wildfly.conf /etc/wildfly/
vi /etc/wildfly/wildfly.conf
```

定義内容は必要に応じて編集してください。私はバインドアドレスを```0.0.0.0 -> 127.0.0.1```に変えました。

```
cp /opt/wildfly/docs/contrib/scripts/systemd/launch.sh /opt/wildfly/bin/
chmod 744 /opt/wildfly/bin/launch.sh
cp /opt/wildfly/docs/contrib/scripts/systemd/wildfly.service /etc/systemd/system/
chown -R wildfly /opt/wildfly*
```

```
systemctl daemon-reload
systemctl start wildfly
systemctl enable wildfly
```

## 6. Wildfly管理ユーザの作成
管理コンソールからWildflyの設定をいじれるように管理ユーザを設定しておく必要があります。

```
cd /opt/wildfly/bin
./add-user.sh
```

細かくは割愛しますがプロンプトに従ってManagement Userを追加してください。
詳しくは[公式のドキュメント](https://docs.wildfly.org/20/Getting_Started_Guide.html#managing-your-wildfly-10)へ。

# Apache HTTP Serverの構築
## 1. Apache HTTP Serverのインストール

```
yum install -y httpd
```

## 2. セキュリティ対策
デフォルト設定のままだとセキュリティ上リスクがあるため是正しておきます。

### デフォルトコンテンツの削除
通常公開しないウェルカムページなどの不要コンテンツは極力排除します。

```
cd /etc/httpd/conf.d
mv welcome.conf welcome.conf.org
mv autoindex.conf autoindex.conf.org
```

### ディレクトリ内容一覧表示機能の無効化
```
vi /etc/httpd/conf/httpd.conf

#Options Indexes FollowSymLinks
Options FollowSymLinks
```

### TRACEメソッドの無効化
XST対策としてTRACEメソッドを無効化します。

```
vi /etc/httpd/conf/httpd.conf

# ファイル末尾に追記
TraceEnable off
```

### バージョン情報表示機能の無効化
HTTPレスポンスヘッダにWebサーバのバージョンを含まないようにします。

```
vi /etc/httpd/conf/httpd.conf

# ファイル末尾に追記
ServerTokens ProductOnly
ServerSignature off
```

### フレーム内ページ表示を同一ドメイン内のみに許可する
クリックジャッキング対策として、HTTPレスポンスヘッダにX-Frame-Optionsヘッダを追加します。

```
# 新規にファイル作成
vi /etc/httpd/conf.modules.d/headers.conf

# ファイル末尾に追記
Header append X-FRAME-OPTIONS SAMEORIGIN
```

# Apache HTTP ServerとWildflyの連携
Apache HTTP ServerへのリクエストをWildflyへ引き込みます。

## 1. リバースプロキシの設定
80番ポートへのアクセスを8080番ポート（WildflyのHTTPリスナ）へ向けます。

```
# 新規にファイル追加
vi /etc/httpd/conf.modules.d/wildfly.conf

<VirtualHost *:80>
  ProxyPass / http://127.0.0.1:8080/
  ProxyPassReverse / http://example.net/
</VirtualHost>
```

## 2. 定義チェック＆再起動
ここまで設定できたら定義ファイルをテストしてApache HTTP Serverを再起動します。

```
httpd -t
systemctl restart httpd
```

# 動作確認
http\://example.com のように、シンプルに80番ポートにアクセスしてみて、Wildflyのウェルカムページが見えれば成功です。

![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/556115/f89dc8c2-fbbe-9b1e-6d1c-57a0243ca703.png)

# まとめ
OCIのLBでSSLに対応しており、バックエンド側通信はHTTPで構築してみました。Web/APサーバでSSL化しようとすると複雑になるのでLBで終端できるのはいいかんじです。

参考：[攻撃を受ける前に見直すApacheの基本的なセキュリティ10のポイント](https://www.rem-system.com/apache-security01/)