【2023年06月版】nginx メモ

# はじめに

nginx 関連のメモ

# 前提条件

- 環境

```terminal
$ uname -a
Linux smb_host 5.15.0-75-generic #82-Ubuntu SMP Tue Jun 6 23:10:23 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
$ cat /etc/os-release
PRETTY_NAME="Ubuntu 22.04.2 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04.2 LTS (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
```

# インストール

```terminal
$ sudo apt nginx
```

# 設定ファイル

## メイン設定ファイル

`/etc/nginx/nginx.conf`

## デフォルトサーバの設定ファイル

`/etc/nginx/conf.d/default.conf`

## SSLの設定ファイル

`/etc/nginx/conf.d/ssl.conf`

## バーチャルホストの設定ファイル

`/etc/nginx/conf.d/virtual.conf`

## 記述内容

### 形式

- ディレクティブ

```
ディレクティブのキー ディレクティブの値;
```

- ブロック / コンテキスト

```
ブロック名/コンテキスト名 {
    ディレクティブのキー ディレクティブの値;
}
```

- コメント

`#` で記述

# モジュール

nignx はさまざまな機能のモジュール構造になっている
基本的に設定は、モジュールをコンテキストとしてブロック構造で記述する
core モジュールの main コンテキストのみブロック構造にはしない

## 代表的なモジュール

| モジュール名 | ブロック/コンテキスト名 | 解説 |
| ------ | ----------------- | ------ |
| Core module | main, http, server, location | Nginx の基本的な動作や設定を制御するモジュールです。 |
| Events module | events | 接続処理やイベント駆動モデルを制御するモジュールです。 |
| HTTP module | http, server, location | HTTP および HTTPS プロトコルのサポートを提供するモジュールです。 |
| Mail module | mail | メールのプロキシサーバーや SMTP, IMAP, POP3 プロトコルをサポートするモジュールです。 |
| Stream module | stream | 任意の TCP / UDP トラフィックのプロキシサーバーを実装するモジュールです。 |
| Upstream module | upstream | 複数のバックエンドサーバーへの負荷分散機能を提供するモジュールです。 |
| Rewrite module | http, server, location, if | URL 再書き込みやリダイレクトルールを定義するためのモジュールです。 |
| SSL module | http, server, stream | SSL/TLS の設定や証明書の管理を行うモジュールです。 |
| Access module | http, server, location | IP アドレスやリファラーに基づいたアクセス制御を行うモジュールです。 |
| Auth (Basic) module | http, server, location | ベーシック認証機能を提供するモジュールです。 |
| Limit Req module | http, server, location | リクエストレート制限機能を提供するモジュールです。 |
| Limit Conn module | http, server, location | 同時接続数制限機能を提供するモジュールです。 |
| Proxy module | http, server, location | HTTP, HTTPS および WebSocket トラフィックのプロキシ機能を提供するモジュールです。 |
| FastCGI module | http, server, location | FastCGI アプリケーションへのアクセスおよびプロキシ機能を提供するモジュールです。 |
| Gzip module | http, server, location | リクエストされたリソースの gzip 圧縮および展開機能を提供するモジュールです。 |
| GeoIP module | http, server, location | GeoIP データベースを利用して、クライアントの地理的な位置に基づいたアクションを行うモジュールです。 |
| HttpHeaders module | http, server, location | HTTP レスポンスヘッダの編集や XSLT 変換を行うモジュールです。 |

# ディレクティブ

## 代表的なディレクティブ

| ディレクティブ名 | 含まれるコンテキスト | 解説 |
| ------ | ------ | ------ |
| `listen` | server | 待ち受けるポートとアドレスを指定します。 |
| `server_name` | server | サーバーの名前（ドメイン名）を指定します。 |
| `root` | location | リクエストされたリソースが存在するディレクトリを指定します。 |
| `index` | location, server, http | サーバーがリクエストに対して提供するデフォルトのファイル名を指定します。 |
| `client_max_body_size` | http, server, location | クライアントからのリクエストで許容する最大ボディサイズを制限します。 |
| `error_page` | http, server, location | 特定の HTTP エラーに対してカスタムエラーページを指定します。 |
| `access_log` | http, server, location | アクセスログのファイルパスを指定します。 |
| `error_log` | main, http, server, location | エラーログのファイルパスを指定します。 |
| `proxy_pass` | location | リクエストを別のサーバーにプロキシするアドレスを指定します。 |
| `gzip` | http, server, location | gzip 圧縮の有効化を制御します。 |
| `ssl_certificate` | server | SSL 証明書のファイルパスを指定します。 |
| `ssl_certificate_key` | server | SSL 証明書の秘密鍵のファイルパスを指定します。 |
| `rewrite` | server, location, if | URL の書き換えルールを設定します。 |
| `fastcgi_pass` | location | FastCGI バックエンドと通信する際のソケットやアドレスを指定します。 |
| `include` | any | 現在の設定ファイルに他のファイルを含める際に使用します。|
| `worker_processes` | main | 同時に実行されるワーカープロセスの数を設定します。 |
| `worker_connections` | events | 各ワーカープロセスが同時に処理できる接続数を設定します。|
| `log_format` | http | ログファイルのフォーマットをカスタマイズします。 |
| `keepalive_requests` | http, server | Keep-Alive 接続で処理できるリクエスト数の上限を設定します。 |
| `keepalive_timeout` | http, server, location | Keep-Alive 接続のタイムアウトを設定します。 |
| `server_tokens` | http, server, location | サーバーレスポンスヘッダに Nginx のバージョン情報を表示するかどうかを制御します。 |
| `autoindex` | http, server, location | ディレクトリのインデックス（ファイル一覧）を自動生成するかどうかを制御します。 |

# さいごに

かんたんでしたね

# 参考資料

[nginx](https://nginx.org/ja/)
[NGINX(エンジンエックス)｜日本公式サイト](https://www.nginx.co.jp/)