AWSでJupyterHub (nginx)

# 概要
全体概要は，[AWSでJupyterHub (概要)](https://qiita.com/ryouka0122/items/af5004d17e0ac934e550) にあるので，参照してください．

ここでは，webサーバとしてnginxを用意を用意して，のちにJupyterhubへのリバースプロキシの設定の手前までやっておきます．
ポートの制御はEC2のセキュリティグループで行います．
作業はすべて`ec2-user`ユーザで行います．（ほんとは分けたほうが良いと思うけど，今回はそれが目的ではないので割愛）

# おしながき
* nginxのインストール
* nginxの設定
* ポート開放



# nginxのインストール
まず，インストールされていないことを確認

```
[ec2-user@ip-xxx-xxx-xxx-xxx ~]$ systemctl status nginx
Unit nginx.service could not be found.
[ec2-user@ip-xxx-xxx-xxx-xxx ~]$
```

EC2にnginxをインストールするとき，`yum install nginx`とすると失敗するので，以下のコマンドを使ってインストールします．

```
sudo amazon-linux-extras install nginx1.12
```

コマンド実行後，インストールが始まり，下図のように`Complete!` と出力されればインストール完了です．

![nginxインストール.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/165030/ccaa270b-8b98-680c-f2da-263486b4ecae.png)

nginxの設定ファイルなどは `/etc/nginx/`配下にあります．
jupyterHubへの簡単なリバースプロキシの設定だけにするので，`nginx.conf`のファイルと`conf.d`のディレクトリだけ触ります．

![設定ファイル.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/165030/57879e47-477b-5d60-d909-69fe3469a801.png)

# nginxサービスの操作

## nginxの起動

以下のコマンドで起動できます．

```
sudo systemctl start nginx
```

現在の状態を確認するには次のコマンドを使います．

```
systemctl status nginx
```

こんな感じで，現在の状態を出力してくれます．このログは，起動中を表す`active (running)` と表示されているのが分かります．
![起動.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/165030/19a1f204-e5ce-596d-91d5-42dd0e9be0b1.png)


## nginxの停止
停止させるには起動時と同じように以下のコマンドを使います．

```
sudo systemctl stop nginx
```

停止コマンドを実行した後にステータスを確認すると，下図のようになっています．
`Active`が`inactive (dead)`になっているのが分かると思います．
![停止.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/165030/7d7ff0d9-40af-cc7b-d09f-954db8ebc6f2.png)

# nginxの確認

nginxを起動させている状態で次のコマンドを実行します．

```
curl http://localhost/
```
実行すると，HTMLがターミナルに出力されると思います．
途中で，`<h1>Welcome to <strong>nginx</strong> on Amazon Linux!</h1>` な感じで確認出来たらnginx自体のセットアップは出来ていることになります．

EC2で，パブリックDNSを確認して，ブラウザから`http://ec2-xxx-xxx-xxx.ap-northeast-1.compute.amazonaws.com/`という感じにしてアクセスしてみます．
しばらくすると「表示できません」のように出てくると思います．
当然のことですが，`http`プロトコルの80番ポートをセキュリティグループで許可していないためです．
そのため，80番ポートを開放する必要があります．

# セキュリティグループの変更
前回のEC2のセットアップの時にインスタンスに紐づけてあるセキュリティグループを変更していきます．
以下のようにEC2インスタンスの詳細から【セキュリティグループ＞インバウンドルールの表示】を選択します．（下図の赤枠のリンク）

![セキュリティグループ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/165030/dcb9eba7-8bae-fc6e-6be1-25b59415bc7a.png)

選択すると次のような画面になるので，【インバウンド】タグを選択して，ルールを表示します．
画像では，【タイプ】がSSH(22番ポート)しか許可していないことを表しています．また【ソース】が`0.0.0.0/0`となっているので，すべてのIPアドレスを許可しています．
今回は80番ポートを開放したいので，【編集】ボタンを押して編集ダイアログを表示させます．
![インバウンド設定.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/165030/412f8a21-00cc-4e91-ba1b-a667452a1254.png)

ダイアログが出てくるので，【ルールの追加】ボタンを押して，現れたレコードの【タイプ】プルダウンメニューから`HTTP`を選択します．
そうすると，以下のように設定されると思います．【ソース】は，`IPv4`と`IPv6`を同時に設定してくれます．気になる場合は，`カスタム`から`マイIP`に変更することで，操作しているIPアドレスのみ許可することが出来るようになります．
設定出来たら，【保存】ボタンを押して，設定を反映させます．
![ルールの編集.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/165030/4075509f-2f2f-bc21-2fce-e7e185076b02.png)

設定はすぐに反映されるため，先ほどブラウザでアクセスに失敗していたと思うので，再度アクセスしてみます．
以下のようにブラウザに表示されれば，設定完了です．
![welcome.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/165030/e9e8c343-e5a3-296f-6240-a496e501bfb3.png)


# まとめ
今回は，nginxを使ったwebサーバのインストール，起動を行い，HTTPプロトコルで利用する80番ポートをセキュリティグループで開放しました．
ひとまずnginxはここまでとして，jupyterHubのセットアップが終わり次第，nginxとjupyterHubをつなぐ作業をします．
ということで，次回はpython周りを準備していきます．