Nginxをもっと理解してみよう　起動編

## はじめに
先日からNginxについて理解できていなかった部分を整理してます。
次のリンクにインストールまでの手順をUbuntuそれぞれで記載してますので、そちらも読んでいただけると嬉しいです。
今回は次の記事の続編ですね

[Nginxをもっと理解してみよう　インストール編](https://qiita.com/bearrabi0506/items/a0dc833f89b53e0b874b)

## 注意事項
本記事ではDockerコンテナ上にNginxをインストールした後の設定をみていきますので、実際に手を動かして確認される方は上のリンクを参考にNginxのインストールまでを行ってからにしてください。


## 初期ページを表示してみよう
設定ファイルの記述はOSに依存しないので、今回はUbuntuのイメージ内での作業のみを記載します。
時間があれば、他のOSイメージ上でも確認してみますね。

##### Nginxの起動（失敗）
```Bash:Terminal
# systemctlをインストール
# DockerコンテナでなければUbuntuにsystemdもsystemctlもインストールする必要ないんだけどなぁ。
$ apt install -y systemd
$ apt install -y systemctl

# Nginxの起動状態を確認
$ systemctl status nginx
nginx.service - A ...
    Loaded: loaded ....
    Active: inactive (dead)

# 上で(dead)と表示されているので、起動していませんね。
# Nginxを起動
$ systemctl start nginx

# もう一度起動状態を確認
$ systemctl status nginx
nginx.service - A ...
    Loaded: loaded ....
    Active: inactive (dead)
```

はい、早速起動しませんね。
では、エラーメッセージを確認してみましょう。

#### エラーメッセージの確認
```Bash:Terminal
# エラーメッセージの表示
$ cat /var/log/nginx/error.log
2021/02/02 15:45:40 [emerg] 4682#4682: bind() to 0.0.0.0:80 failed (98: Address already in use)
2021/02/02 15:45:40 [emerg] 4682#4682: bind() to [::]:80 failed (98: Address already in use)
2021/02/02 15:45:40 [emerg] 4682#4682: bind() to 0.0.0.0:80 failed (98: Address already in use)
2021/02/02 15:45:40 [emerg] 4682#4682: bind() to [::]:80 failed (98: Address already in use)
2021/02/02 15:45:40 [emerg] 4682#4682: bind() to 0.0.0.0:80 failed (98: Address already in use)
2021/02/02 15:45:40 [emerg] 4682#4682: bind() to [::]:80 failed (98: Address already in use)
2021/02/02 15:45:40 [emerg] 4682#4682: bind() to 0.0.0.0:80 failed (98: Address already in use)
2021/02/02 15:45:40 [emerg] 4682#4682: bind() to [::]:80 failed (98: Address already in use)
2021/02/02 15:45:40 [emerg] 4682#4682: bind() to 0.0.0.0:80 failed (98: Address already in use)
2021/02/02 15:45:40 [emerg] 4682#4682: bind() to [::]:80 failed (98: Address already in use)
2021/02/02 15:45:40 [emerg] 4682#4682: still could not bind()
```
アドレスが既に使われていると言われていますが、__これはポート番号が既に使われているってことなんですよね__

#### エラーの対応
```Bash:Terminal
# ポートを確認するためにlsofをインストール
$ apt install -y lsof

# lsofコマンドで80番ポートを開いているプロセスを確認
$ lsof -i:80
COMMAND  PID     USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
nginx   4411     root    6u  IPv4 1700893      0t0  TCP *:80 (LISTEN)
nginx   4411     root    7u  IPv6 1700894      0t0  TCP *:80 (LISTEN)
nginx   4412 www-data    6u  IPv4 1700893      0t0  TCP *:80 (LISTEN)
nginx   4412 www-data    7u  IPv6 1700894      0t0  TCP *:80 (LISTEN)
nginx   4413 www-data    6u  IPv4 1700893      0t0  TCP *:80 (LISTEN)
nginx   4413 www-data    7u  IPv6 1700894      0t0  TCP *:80 (LISTEN)
nginx   4414 www-data    6u  IPv4 1700893      0t0  TCP *:80 (LISTEN)
nginx   4414 www-data    7u  IPv6 1700894      0t0  TCP *:80 (LISTEN)
nginx   4415 www-data    6u  IPv4 1700893      0t0  TCP *:80 (LISTEN)
nginx   4415 www-data    7u  IPv6 1700894      0t0  TCP *:80 (LISTEN)

# どういうわけか、nginxが起動しているように見えます。
# 一旦、すべてのプロセスを落とします。
$ kill 4411

# nginxを起動
$ systemctl start nginx

# nginxの状態を確認
$ systemctl status nginx
nginx.service - A high performance web server and a reverse proxy server
    Loaded: loaded (/usr/lib/systemd/system/nginx.service, enabled)
    Active: active (running)
```

これでnginxの起動までは確認することができました。
ブラウザからページにアクセスしてみます。

![スクリーンショット 2021-02-02 16.37.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/723274/0935046f-4545-3318-55c3-f61b0d263d34.png)

これで起動までは確認することができました。

次回から設定編を行っていきます。