Open8

Nginxの設定とか

Kumamoto-HamachiKumamoto-Hamachi

そもそもNginxとは

Webサーバーの1つ。
(1)静的なコンテンツのWebサーバー:画像、html/css、ダウンロードファイル:4章
(2)動的なコンテンツのWebサーバー:ソフトウェア(webアプリケーション)と接続して使われる:5章
(3)ロードバランサ、リバースプロキシ:7章

リバースプロキシ・ロードバランサーとは

クライアントからのWebアクセスを別のサーバーに転送するサーバー。
複数の転送先に負荷を分散するリバースプロキシをロードバランサーと呼ぶ。
※WebサーバーはApache、ロードバランサーだけNginxみたいなことも出来るヨ。またその逆も可能だし当然、両方NginxもOK。

以下参考文献

参考

https://book.impress.co.jp/books/1115101148

Kumamoto-HamachiKumamoto-Hamachi

Nginxの内部の構造とインストール

2つのプロセス:masterとworker

『masterプロセス』はroot動作。
設定ファイル読み込み+設定やworkerの起動、監視を担当。ソケットの待受を設定。

『workerプロセス』は一般ユーザー権限で動作。
ネットワーク処理のイベントループを処理(?)、ソケットを使って接続、HTTPやSSL/TLSのプロトコル処理も担当。ネットワークI/OやファイルI/Oを実施。

ソケットとは?以下、TODO

イベントループとは?

ネットワークI/O、ファイルI/Oの多重化とは?

前提としてI/OはメモリやCPUに比べると遅い。だから、I/Oがボトルネックにならないように多重化する。

Nginxのモジュールとは?

機能ごとにモジュールに分かれている。

  • 静的に組み込まれたモジュール

  • 動的に組み込まれたモジュール

インストール

Kumamoto-HamachiKumamoto-Hamachi

Nginxのディレクトリ構造

とりあえず設定ファイルのあるetc/nginx下のファイルを意識!!
nginx.confファイルは最初に読み込まれるファイルで、ここから他の設定ファイルも読みに行く!

次にアクセスログの/var/log/nginx/access.logとエラーログの/var/log/nginx/error.log

ログのローテートは/etc/logrotate.d/nginxのハズ!

Kumamoto-HamachiKumamoto-Hamachi

前提:HTTPの復習

Hostヘッダのことは載ってない
https://atmarkit.itmedia.co.jp/ait/articles/1508/31/news016_3.html

P.40
HostヘッダはURLのホスト名とポート番号の部分を表す。Hostヘッダの中身によって応答するコンテンツを変えることで1つのWebサーバーが複数ホスト名のWebサーバーを兼業出来る。この時のそれぞれのホスト名のWebサーバーをバーチャルホストと言う。(実際のWebサーバーは1つだしね)

Keep-Aliveとは

HTTP/1.0までは1つのリクエスト-1つのレスポンスで都度、TCPの接続を閉じていた。
HTTP/1.1からは1回の接続で複数のリクエスト/レスポンスを処理出来る。これをKeep-Aliveと言う。

リクエストヘッダ・レスポンスヘッダでConnection:に設定。

チャンク分割

Websocket復習

Kumamoto-HamachiKumamoto-Hamachi

Nginxの設定ファイル その1

用語

  • ディレクティブ
    設定項目のこと。;(セミコロン)で終わるのと、{ }で囲ったコンテキスト

  • コンテキスト
    どのブロックにも囲まれていない。mainコンテキスト。
    {ディレクティブ名}コンテキスト。
    ちなみにhttpコンテキストはmainコンテキスト、serverディレクティブはmainコンテキストの中にしか書けない。

  • モジュール
    モジュール = nginxの構成単位
    設定ファイルはモジュール単位で記述する

??:コンテキストとは違うの?
https://qiita.com/morrr/items/7c97f0d2e46f7a8ec967

  • include
    別の設定ファイルを読み込み出来る
Kumamoto-HamachiKumamoto-Hamachi

Nginxの設定ファイル その2

mainコンテキスト

user nginx-taro;
worker_processes 1;

error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid
  • workerプロセス
    workerプロセス数の設定。
    I/Oの多重化処理により同時に複数のリクエストを処理出来る。
    だが、シングルスレッドで動作するため、CPUはプロセスにつき1個しか使われない。なのでコア数程度に指定するのが良い。

以下の様に設定するとコア数程度になる。

worker_processes auto;
  • eventsコンテキスト

worker_connectionsは1つのworkerプロセスが同時に受け付けられる(リクエスト/レスポンス)接続数。
※リバースプロキシで使う場合はBEとも通信するので1回のアクセスで2つ使う

events {
    worker_connections 1024;
}