nginxでVirtualHostを適用して、Let’sEncryptでワイルドカード証明書を有効にする

今回の記事は[【Centos7】【Let’sEncrypt】Nginxを入れてSSLを有効にするまで](https://qiita.com/t-sakurai816/items/4df9f3728cdbaf1ff0bf) の記事で作成した環境をもとに書いています。


今回作成したリンクたち

`http://~~`のURLなのに`https://~~`にリダイレクトしてるのに注目してください

http://oracle-develop.saku-dev.space
http://hoge.saku-dev.space
http://test.saku-dev.space

# ディレクトリの準備

VirtualHostの設定を行うために、それぞれのディレクトリを作成します
今回はドメイン名でディレクトリを作成しました。

```
$ pwd
/var/www
$ ll
合計 0
drwxr-xr-x  2 root root  6  9月 17 12:36 hoge.saku-dev.space/
drwxr-xr-x. 2 root root 24  9月  4 12:46 oracle-develop.saku-dev.space/
drwxr-xr-x  2 root root  6  9月 17 12:35 test.saku-dev.space/
```

あとはまぁそれぞれのディレクトリに`public_html`を作成して、その中に`index.html`を作成して適当に文字を書いておきます

---

ちなみにこの状態ではよくないです。
ブラウザから閲覧することは出来ますが、WEBサーバーがファイルを操作することが出来ないです。
なぜなら所有者が`root`だからです。`nginx`に変更しましょう

## 所有者の変更（ユーザー,グループ）

`-R`オプションをつけることで再帰的に`nginx`に変更することが出来ます。
以下のコマンドでは3つのディレクトリとその配下にあるディレクトリ,ファイルの所有者を変更しています

```sh
$ sudo chown -R nginx:nginx hoge.saku-dev.space/ oracle-develop.saku-dev.space/ test.saku-dev.space/
```

```
$ ll
合計 0
drwxr-xr-x  3 nginx nginx 25  9月 17 13:04 hoge.saku-dev.space/
drwxr-xr-x. 3 nginx nginx 25  9月 17 13:05 oracle-develop.saku-dev.space/
drwxr-xr-x  3 nginx nginx 25  9月 17 13:04 test.saku-dev.space/
$ ll oracle-develop.saku-dev.space/
合計 0
drwxr-xr-x 2 nginx nginx 24  9月 17 13:05 public_html/
$ ll oracle-develop.saku-dev.space/public_html/
合計 8.0K
-rwxr-xr-x 1 nginx nginx 4.9K  9月  4 12:46 index.html
```

いい感じですね
最終的なディレクトリ構成は以下の様になりました。
余談ですが`tree`コマンドはめちゃくちゃ便利なので、入れたほうがいいです

```
$ tree
.
├── hoge.saku-dev.space
│   └── public_html
│       └── index.html
├── oracle-develop.saku-dev.space
│   └── public_html
│       └── index.html
└── test.saku-dev.space
    └── public_html
        └── index.html

6 directories, 3 files
```

# VirtualHost

まずは`/etc/nginx/`に`vhosts`というディレクトリを作成します。
あとで管理しやすくするためです。おそらく作成しないでも大丈夫ですが私は整理するのが大好きなので作成します

```
$ cd /etc/nginx
$ sudo mkdir vhosts
```

## VirtualHostの設定ファイルを作成する

管理しやすいように`FQDN.conf`という名前にすることにします
FQDNってなんだっけという方は→https://www.kagoya.jp/howto/network/fqdn/

```
$ sudo touch hoge_saku-dev_space.conf
$ sudo touch test_saku-dev_space.conf
$ sudo touch oracle-develop_saku-dev_space.conf
$ ls
hoge_saku-dev_space.conf  oracle-develop_saku-dev_space.conf  test_saku-dev_space.conf
```

「おいおいFQDNじゃなくて`_`じゃないか」って?
そりゃそうよ`.conf`にしたいので
`.`がいっぱいついてたらわかりづらいからね


まぁ`.`でも大丈夫だと思う


では`conf`を書いていきます
`hoge`の部分をそれぞれの名前に合わせ作成します

```conf:hoge_saku-dev_space.conf
server {
	listen 80;
	server_name hoge.saku-dev.space;
	access_log /var/log/nginx/hoge_saku-dev_space-access.log main;
	error_log /var/log/nginx/hoge_saku-dev_space-error.log;
	root /var/www/hoge.saku-dev.space/public_html;

	location /{

	}

}
```

ざっくりこんな感じです↓

| 項目 | 内容 |
| --- | --- |
| listen | ポート番号 |
| server_name | ドメイン名 |
| access_log | アクセスログを保存する場所 |
| error_log | エラーログを保存する場所 |
| root | 公開するディレクトリ |
| location | どのファイルを最初にみるか。 |


## VirtualHostを有効にする

以前作成した`nginx.conf_org`をもとに今回は作成していきます。バックアップとっておいて良かったですね

```
$ sudo mv nginx.conf nginx.conf.20200917
$ sudo cp nginx.conf_org nginx.conf
```

これで今まで使っていた`nginx.conf`を`nginx.conf.20200917`という名前で保存しておいて、もともとあった`nginx.conf`を作ることが出来ました

`nginx.conf`の`http{}`で囲まれているところに`include /etc/nginx/vhosts/*.conf;`を追加します
私は38行目に追加しました


```conf:nginx.conf
 17 http {
 18     log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
 19                       '$status $body_bytes_sent "$http_referer" '
 20                       '"$http_user_agent" "$http_x_forwarded_for"';
 21
 22     access_log  /var/log/nginx/access.log  main;
 23
 24     sendfile            on;
 25     tcp_nopush          on;
 26     tcp_nodelay         on;
 27     keepalive_timeout   65;
 28     types_hash_max_size 2048;
 29
 30     include             /etc/nginx/mime.types;
 31     default_type        application/octet-stream;
 32
 33     # Load modular configuration files from the /etc/nginx/conf.d directory.
 34     # See http://nginx.org/en/docs/ngx_core_module.html#include
 35     # for more information.
 36     #include /etc/nginx/conf.d/*.conf;
 37     ## ADD sakurai
 38     include /etc/nginx/vhosts/*.conf;#VirtualHostのファイルを読み込み
```

## 構文チェック

設定ファイルに書いた内容が合っているかどうかを`nginx`を再起動する前に確認しましょう

```
$ sudo nginx -t

/etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
```

OKですね
nginxを再起動します。

もし別のサイトが動いていて、サーバーを落としたくない場合は再読み込みするだけでも今回の場合はOKです

```
$ sudo systemctl reload nginx
```

# アクセスしてみる

![スクリーンショット 2020-09-17 23.47.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/492847/54e4fed3-c54c-83d7-bc14-8c25c531011b.png)

![スクリーンショット 2020-09-17 23.47.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/492847/a81d4831-0f8c-73fa-3a7b-8aac6940c2d9.png)

![スクリーンショット 2020-09-17 23.47.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/492847/f2668a3e-90c5-da88-17f3-40792c4614a9.png)

出来ました！！！！！！


# ログの確認

設定したログがきちんと作成されているか確認しましょう
これはrootユーザーで実行する必要があります

```
$ sudo su -
$ ls /var/log/nginx
```


アクセスログの見方はまた今度…
疲れた…
もう少し頑張りましょう


# Let’sEncryptでワイルドカード証明書の設定

## 証明書発行

[Let'sEncryptでワイルドカード証明書の取得方法](https://qiita.com/NaaO/items/c51b3ab33e3435f6935f)

こちらの記事を参考にしています
この記事読めば出来ます

前回の記事で`certbot`は入れていたので飛ばして大丈夫です

今回は以下のようなコマンドで実行
ドメインにワイルドカード`*`で指定して、`example@mail.com`というのはメールアドレスです


```
$ sudo certbot certonly --manual  --preferred-challenges dns-01 -d '*.saku-dev.space' -m example@mail.com --agree-tos --manual-public-ip-logging-ok
```

終わったら記事通りにお名前ドットコムで設定してしばらくまってEnterキーを押します

## conf書き換え

証明書の設定と301リダイレクトの設定を入れます
`access_log`と`error_log`の設定も追記します

```conf:hoge_saku-dev_space.conf
server {
	listen 80;
	server_name hoge.saku-dev.space;
	access_log /var/log/nginx/hoge_saku-dev_space-access.log main;
	error_log /var/log/nginx/hoge_saku-dev_space-error.log;
	root /var/www/hoge.saku-dev.space/public_html;
	return 301 https://hoge.saku-dev.space/$request_uri; ##追記

	location /{
	}

}
#↓追記
  server {
    listen  443 ssl;
    server_name     hoge.saku-dev.space;
    access_log /var/log/nginx/hoge_saku-dev_space-access_ssl.log main;
    error_log /var/log/nginx/hoge_saku-dev_space-error_ssl.log;
    ssl_certificate         /etc/letsencrypt/live/saku-dev.space//fullchain.pem;
    ssl_certificate_key     /etc/letsencrypt/live/saku-dev.space//privkey.pem;
    root  /var/www/hoge.saku-dev.space/public_html;
}
```

これでnginxの再読み込みが完了したらOKです！！！
お疲れさまです！！！