Nginxをもっと理解してみよう　インストール編

## はじめに
最近はApacheよりもNginxが使われるケースが多いようですね。
というわけで、なんとなく設定していたNginxについて調べた内容を記載していこうと思います。

## この記事の対象者

- Nginxをゼロから設定してみたい人

## あまり詳しく解説していないこと

- dockerのコマンド
- linuxのコマンド
- RailsやLaravel、Djangoなどでの使い方

## 本記事での作業環境

- Mac Mini 2018
- mac OS BigSur(version 11.1)
- VirtualBox(version 6.1.16)
- Ubuntu 20.04(on VirtualBox)
- Docker(version 20.10.2)

## Nginx（エンジンエックス）って何？

NginxはWebサーバー用のソフトウェアです。
OSとアプリケーションの間で動作するミドルウェアと呼ばれるソフトウェアの一種ですね。
同等の機能があるものには、ApacheやIIS等があります。
※ApacheやNginx自体を「Webサーバー」と表現することがありますが、__本記事では「Webサーバー」はサーバー用コンピュータ本体とします__
次の図のように、ユーザーや管理者がWebシステムへ要求した際に正確に結果を返してくれるのは、Webサーバー用のアプリケーションが動いてるおかげなんですよ。


![スクリーンショット 2021-01-31 16.03.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/723274/fa8cd537-4fb1-2595-942c-92a422f3e3f5.png)

## Nginxの実験用にDockerでコンテナを作ってみよう

今回はUbuntu、CentOS、AmazonLinux2のイメージ上でNginxの環境を構築します。
DockerHubには公式のNginxイメージがありますが、今回は使用しません。
Nginxをより詳しくみていくには、自分で空のOSにインストールしていく方が勉強になりますからね。

### Ubuntuイメージを取得して、コンテナにログインするまで

```Bash:Terminal

# ubuntuのDockerイメージを取得
$ docker pull ubuntu:latest

# イメージからコンテナを生成してデタッチドモード（バックグラウンド）で起動
$ docker run -itd --name ubuntu_nginx -p 8088:80 --privileged f63

# コンテナにログイン
$ docker exec -it b96 /bin/bash
```

次のようにrootでログインできていればOKです。

```Bash:Terminal
root@b96f5f7019a4:/#
```


### CentOSイメージを取得して、コンテナにログインするまで


```Bash:Terminal
# CentOSのDockerイメージを取得
# docker pull centos:latestとするとdebianのイメージがなぜか取得されるので注意！！
$ docker pull centos:centos8

# イメージからコンテナを生成してデタッチドモード（バックグラウンド）で起動
$ docker run -itd --name centos_nginx -p 8087:80 --privileged 300 /sbin/init

# コンテナにログイン
$ docker exec -it b96 /bin/bash

```

次のようにrootでログインできていればOKです。

```Bash:Terminal
root@b96f5f7019a4:/#
```


### AmazonLinux2イメージを取得して、コンテナにログインするまで

```Bash:Terminal
# AmazonLinux2のDockerイメージを取得
$ docker pull amazonlinux:2

# イメージからコンテナを生成してデタッチドモード（バックグラウンド）で起動
$ docker run -itd --name amznlinux_nginx -p 8086:80 --privileged d79

# コンテナにログイン
$ docker exec -it b96 /bin/bash

```

次のようにログインできていればOKです。

```Bash:Terminal
bash-4.2#
```

## コンテナ内でnginxをインストールしてみよう
ここでは、ログイン済のdockerコンテナ内でNginxをインストールしてみます。
コンテナのOSは初期状態ではNginxがインストールされていないので、自分でインストールする必要があるんですね。

### UbuntuのコンテナでNginxをインストール

```Bash:Terminal
# まず、aptパッケージの更新を行います。
$ apt update

# 次に、Nginxをインストールします
# 途中で地域の選択を2回要求されるので、最初の地域はAsia、次の地域はTokyoの番号を入力してエンターを押してください。
$ apt install -y nginx

# Nginxのバージョンを確認します。
$ nginx -V

nginx version: nginx/1.18.0 (Ubuntu)
.
.
.
```

これでUbuntu上でのNginxのインストールまで完了しました。

### CentOSのコンテナでNginxをインストール

```Bash:Terminal
# まず、yumパッケージの更新を行います
$ yum update -y

# Nginxをインストールします
$ yum install -y nginx

# Nginxのバージョンを確認します。
$ nginx -V

nginx version: nginx/1.14.1
.
.
.

```

これで、CentOS上でのNginxのインストールまで完了しました。

### AmazonLinux2のコンテナでNginxをインストール

```Bash:Terminal
# いきなりNginxをインストールします
$ amazon-linux-extras install -y nginx1

# Nginxのバージョンを確認します。
$ nginx -V

nginx version: nginx/1.18.0
.
.
.
```

これで、AmazonLinux2上でのNginxのインストールまで完了しました。

## インストールされたものを確認してみよう

ここでは、実際にインストールした際に追加されたファイルをみてみよう

### Ubuntuのコンテナで確認

#### 実行ファイル
/usr/sbin/nginx

このファイルがコマンドで実行されるプログラムの本体ですね


#### 初期ページ
/usr/share/nginx/html/index.html

Nginxの初期ページにアクセスした際に表示されるhtmlファイルですね

#### 設定ファイル群の保管ディレクトリ
/etc/nginx/

主に設定をする時はこのディレクトリ配下のファイルを編集するんですね

#### ログディレクトリ
/var/log/nginx/

このディレクトリ配下にアクセスログやエラーログが作成されます

#### ログローテーション用設定ファイル
/etc/logrotate.d/nginx

Linuxの機能でログを分割するLogRotateがあります。
ここでは、Nginxのログを分割する単位を定義できるんですね。

#### モジュール別の管理ディレクトリ
/usr/lib/nginx/modules/

Webサーバーに特定の機能を追加したい場合に利用されます。
設定ファイルにこのディレクトリのパスが記載されていますので、詳細は別記事の設定編で紹介しますね



### CentOSコンテナで確認

ほとんどUbuntuの内容と同じでした。

#### 実行ファイル
/usr/sbin/nginx

このファイルがコマンドで実行されるプログラムの本体ですね

#### 初期ページ
/usr/share/nginx/html/index.html

Nginxの初期ページにアクセスした際に表示されるhtmlファイルですね
Ubuntuの時と違って、このファイルのあるディレクトリに以下のファイルがあることです

- 404.html
- 50x.html
- nginx-logo.png
- poweredby.png

#### ログディレクトリ
/var/log/nginx/

このディレクトリ配下にアクセスログやエラーログが作成されます
Ubuntuの時と違って、初期状態ではディレクトリが空ですね


#### モジュール別の管理ディレクトリ

/usr/lib64/nginx/modules/

Webサーバーに特定の機能を追加したい場合に利用されます。
Ubuntuの時とはディレクトリのパスが違いますね。
別にUbuntuが32bitOSだということはないのですが。。


### AmazonLinux2コンテナで確認


#### 実行ファイル
/usr/sbin/nginx

このファイルがコマンドで実行されるプログラムの本体ですね


#### 初期ページ

/usr/share/nginx/html/index.html

Nginxの初期ページにアクセスした際に表示されるhtmlファイルですね
CentOSの時と違って、このファイルのあるディレクトリに以下のディレクトリがあることです

- 404.html
- 50x.html
- nginx-logo.png
- poweredby.png
- icons

#### ログディレクトリ
/var/log/nginx/

このディレクトリ配下にアクセスログやエラーログが作成されます
ここはCentOSと同じですね

#### モジュール別の管理ディレクトリ

/usr/lib64/nginx/modules/

Webサーバーに特定の機能を追加したい場合に利用されます。
ここはCentOSと同じですね



## 次回に続く
この記事では、NginxをUbuntu、CentOS、AmazonLinux2イメージにインストールしてみました。
次回の記事で起動から設定変更までを行っていきます。

最後まで読んでいただき、ありがとうございます:relaxed: