【EC2 + Nginx】 第3回 Basic認証設定 

# はじめに
本記事ではWebサイトへのBasic認証設定を解説します。
Basic認証は事前に設定したIDとパスワードを入力することで認証する方法です。
取り急ぎとして設定する場面は多くありますが、あくまでも簡易的な機能であるため、勉強や検証環境以外の環境で使用する場合、別途セキュリティ対策はしっかり行いましょう。
少しでも皆さんの参考になれば幸いです。

前回、サブドメイン登録＆SSL化設定手順についてまとめました。
本記事単体でも参考になるかと思いますが、[【EC2 + Nginx】第2回 サブドメイン登録＆SSL化設定](https://qiita.com/KoutaKawaguchi1101/items/011a2406392d2ea4beec)も合わせてご覧ください。

# こんな人に読んでほしい
- Webサイトやアプリケーションを閲覧する環境を作りたい
- EC2 + Nginxを使った環境を作りたい
- Basic認証を設定したい
- Nginxについて理解を深めたい

# 前提条件
- EC2インスタンス作成済みであること
- Nginxインストール済みであること
- SSH接続できること

# 解説内容
- [【EC2 + Nginx】 第1回 Webホスティング](https://qiita.com/KoutaKawaguchi1101/items/46e414546ed651de3c1b)
- [【EC2 + Nginx】 第2回 サブドメイン登録＆SSL化設定](https://qiita.com/KoutaKawaguchi1101/items/011a2406392d2ea4beec)
- [【EC2 + Nginx】 第3回 Basic認証設定]() <- 今回

# 実施手順
- パッケージインストール
    - SSH接続
    - Linuxディストリビューションの確認
    - パッケージインストール
- 認証ファイルの設定
    - .htpasswdファイルの作成
    - 生成ファイルの確認
    - Nginx設定ファイルへの登録
- 動作確認
    - 設定反映確認
    - 再設定時・設定解除時の確認

## パッケージインストール
`.htpasswd`ファイルの利用に必要なパッケージをインストールしていきます。
.htpasswdファイルは、Apache Webサーバーにおいて、ユーザー名とパスワードを保管するためのファイルです。

### SSH接続
まずはEC2へSSH接続していきます。
以下コマンドで接続しましょう。

```
ssh -i <キーペア名>.pem ec2-user@<パブリックIP>
```

### Linuxディストリビューションの確認
環境によりインストールコマンドが異なるため、EC2環境のLinuxディストリビューションを確認します。
以下コマンドで確認しましょう。

```
cat /etc/os-release
```

例として以下のような結果が出力されます。
`ID_LIKE`に記載の内容を確認すると`fedora`と記載があるため、`RedHat`系ディストリビューションであることがわかりました。

![ngin.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2952770/1df5b914-3800-a072-6dc6-dfb4ac9820b5.png)

### パッケージインストール
ここでは以下２パターンのインストールコマンドを記載します。
環境に応じてインストールコマンドが何かは調べてみてください。

**RedHat系**
```
sudo yum install httpd-tools
```

**Debian系**
```
sudo apt-get install apache2-utils
```

`Complete!`が表示されればインストール成功です。

## 認証ファイルの設定
### .htpasswdファイルの作成
それでは`.htpasswd`ファイルを作成していきましょう。
今回は以下のように設定していきます。
- ユーザ名：`TestUser`
- パスワード：`TestPass`

次のコマンドを実行してください。

```
sudo htpasswd -c /etc/nginx/.htpasswd <ユーザ名>
```

パスワードが聞かれるので、二度入力してください。
```
New password: <パスワード入力>
Re-type new password: <確認用に再度パスワード入力>
Adding password for user <ユーザ名>
```

### 生成ファイルの確認
それでは生成された`.htpasswd`ファイルを確認しましょう。
以下コマンドを実行して確認してください。
```
cat /etc/nginx/.htpasswd
```

ユーザ名とハッシュ化されたパスワードが記録されています。
![pass.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2952770/7757d25a-10c9-155e-69b9-ac91c77ceb1f.png)

### Nginx設定ファイルへの登録
最後に作成した`.htpasswd`ファイルを`nginx.conf`に登録していきます。
次のコマンドで`nginx.conf`を開きます。
```
sudo vi /etc/nginx/nginx.conf
```

そして以下の設定を追加し、上書きしてください。
設定内容はそれぞれ以下の通りです。
- location：Basic認証をかけたいエンドポイントURL
- auth_basic：認証名(任意の名称)
- auth_basic_user_file：.htpasswdファイルのフルパス

```
location / {
    auth_basic "Basic Authentication";
    auth_basic_user_file /etc/nginx/.htpasswd;
}
```

Nginxの再起動を忘れないようにしましょう。
```
sudo systemctl restart nginx
```

## 動作確認
### 設定反映確認
それでは設定が反映されているか確認します。
Webページ`https://<ドメイン>`へアクセスすると、ユーザ名とパスワードが求められます。
設定した内容を正しく入力すると、ページが閲覧できます。
![basic.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2952770/2aef0229-d690-2c86-99bd-24e7e100d1c6.png)
これでBasic認証設定が完了しました。

### 再設定時・設定解除時の確認
一度Basic認証を突破するとページ更新しても再度ユーザ名とパスワードは求められません。
確認したい場合はURLホスト名の前に`a@`をつけてページ更新してください。
```
https://<任意の文字列>@<ドメイン名>
```

# まとめ
今回で３部すべて完結しました。
比較的簡単に構築できたのではないでしょうか。
Webサイトホスティングの環境やセキュリティ対策は、他にも様々な方法がありますので
皆さんの環境に合ったやり方を探してみてください。

ここまで読んでくださりありがとうございました！

ぜひこちらも併せてお読みください。

- [【EC2 + Nginx】 第1回 Webホスティング](https://qiita.com/KoutaKawaguchi1101/items/46e414546ed651de3c1b)
- [【EC2 + Nginx】 第2回 サブドメイン登録＆SSL化設定](https://qiita.com/KoutaKawaguchi1101/items/011a2406392d2ea4beec)
- [【EC2 + Nginx】 第3回 Basic認証設定]() <- 今回