「nginx実践ガイド」の感想・備忘録1

書籍「nginx実践ガイド」のまとめ。

点数

80

感想

nginxを使うのに必要な情報は、一通り記述されていたと思う。

ただし、普通に使用するのには不要な情報も多かった。

基本

nginxの特徴

  • Webサーバやロードバランサ(リバースプロキシ)として主に使われる。
  • 設定ファイルがシンプルで理解しやすい。
  • 必要なCPUやメモリのリソースが少なく、同時接続数が増えても性能が落ちにくい。
  • サービスを止めない再起動・バージョンアップが可能。

内部で機能ごとのモジュールに分かれていて、コンパイル時に組み込むモジュールを指定することができる。
ただし、配布されているバイナリパッケージにはほとんどのモジュールが組み込まれているため、モジュールの有無を意識することはない。

nginxのプロセス

nginxを起動するとmasterとworkerの2つのプロセスが生成される。
1つのmasterが複数のworkerを起動するが、1つのworkerの中でもI/Oが多重化されている。

master

rootユーザーで起動され、以下の処理を行う。

  1. 設定ファイルを読み込む。
  2. ソケットの待ち受けを設定する。
  3. workerを起動・監視する。

worker

worker 一般ユーザーで起動され、以下の処理を行う。

  1. ネットワークのイベントループを処理する。
  2. masterが待ち受けを設定したソケットを使って接続を受け付ける。
  3. ネットワークやファイルのI/Oを実施する。
  4. HTTPやSSL/TLSのプロトコル処理も行う。

nginxのインストール

stableとmainlineの2つのバージョン系統があり、アップデート・バグ修正などはまずmainlineに取り込まれ、重大なバグ修正だけがstableに取り込まれる。
開発元はmainlineを利用することを推奨している。

1. yumリポジトリの追加

  • CentOSデフォルトのリポジトリにはnginxが存在しない。
  • 人気のあるFedora ProjectのEPELリポジトリのnginxはバージョンが古い。
    (セキュリティメンテナンスは行われているので、新機能が不要な場合には有効)
  • 通常は、nginx開発元が配布するmainlineのyumリポジトリを使う。

sudo vi /etc/yum.repos.d/nginx.repo

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1

2. インストール

sudo yum install nginx

3. 自動アップデートの設定

yum-cronをインストールし、yum-cronの設定ファイルを編集して自動アップデートを有効にする。
デフォルトではパッケージのダウンロードまでしか実行されないため、アップデート適用処理を有効にする。

  1. sudo yum install yum-cron
  2. sudo vi /etc/yum/yum-cron.conf
    apply_updates = yes

nginxのディレクトリ構造

  • /etc/logrotate.d/nginx:ログローテーション設定。
  • /etc/nginx:設定ファイルが置かれるディレクトリ。
  • /etc/lib/systemd/system/nginx.service:起動スクリプト。
  • /usr/share/nginx/html:ドキュメントルート。
  • /var/log/nginx:access_logとerror_logが置かれるディレクトリ。
    毎晩ローテートされ、52日分以上のファイルが溜まると古いものから削除される。

/etc/nginxに配置される主な設定ファイル

  • nginx.conf:最初に読み込まれるファイル。他のファイルはこのファイルから読み込まれる。
  • mime.types:拡張子とContent-Typeのマッピング。
  • conf.d/default.conf:ポート番号やドキュメントルートなど基本的な設定。
  • fastcgi_params:FastCGIのパラメータとnginxの変数やテキストのマッピング。

ファイアウォールの設定

ほとんどのディストリビューションはデフォルトでファイアウォールが設定されているため、ポートを開放しないとアクセスできない。
sudo firewall-cmd --add-service http
sudo firewall-cmd --add-service http --permanent
※httpsの場合はサービス名をhttpsにする

起動・再起動など

sudo systemctl start/stop/restart/reload/status nginx

起動できない場合はsudo systemctl status nginxで表示されるログが役に立つ。

Keep-Alive

HTTP/1.0まではレスポンスの度にTCP接続を閉じていたが、HTTP/1.1からはKeep-Aliveと呼ばれる機能により1回の接続で複数のリクエストとレスポンスを処理できるようになった。
HTTP/1.1のリクエストではデフォルトでKeep-Aliveが有効であり、HTTP/1.0でもリクエストヘッダにConnection: Keep-Aliveを指定することで有効となる。
Apache2.4ではデフォルトでKeepAliveがONになっている。

WebSocket

HTTP/1.1ではWebSocketと呼ばれる双方向通信の規格が追加された。
WebSocketでは、最初のリクエストにUpgrade: websocketというヘッダを付けてネゴシエーションした後は、双方向に通信できるようになっている。
HTTP/2ではWebSocketは削除された。

HTTP/2

HTTP/1.1では1つのリクエストが完了するまで次のリクエストを送ることができないが、HTTP/2では1つの接続で複数のファイルを読み込むことができるようになった。


【新しい記事】

【古い記事】

コメントを残す

メールアドレスが公開されることはありません。