初心者インフラエンジニアが困ったときに試行錯誤するブログ

インフラエンジニアが,開発の勉強をするときのログを残します

【技術書要約】nginx実践入門のポイントを3分で押さえる

実現したいこと

nginx実践入門を読みました.

ポイントを3分で押さえられる程度にまとめました. とても良い本だったので,これをきっかけに読者が増えれば嬉しいです

やったこと

以下に各目次と簡単な要点をまとめました. ご参考にしていただければ.

nginxの概要とアーキテクチャ

nginxの用途を2つ挙げるなら?

  • 静的ページを返す
  • リバースプロキシとして使う

リバースプロキシとは?

Apacheとのモデルの違いは?

  • ApacheはMPM(Multi Processing Module)を採用おり,prefork, worker, eventなどの複数の動作モデルを使用できるのに対し,nginxはイベント駆動のみ

Apacheとの拡張性の違いは?

  • Apacheは拡張モジュール単体でビルドできるのに対し,nginxは本体のビルド時にしか拡張モジュールを組み込めない

Apacheとnginxのプロセスの違いは?

  • Apacheは,preforkモデルの場合,クライアントごとにプロセスを起動し,一連の処理を並行して行うのに対し,nginxは発生したイベント毎に並行して処理していく

イベント駆動とは?

  • 各イベントに対応したコールバック関数のみが実行される仕組み

I/O処理の効率化手法を3つ挙げるなら?

I/O Muitiplexingとは?

  • 複数のファイルディスクリプタを監視し,それらのどれかが使用可能になるまでプログラムを待機させること

ブロッキングi/Oとは?

ノンブロッキングI/Oとは?

  • I/O関連のシステムコールによってプログラムがブロックされる見込みの場合やまだ処理できるデータがない場合は,errnoがセットされ,中断して別のディスクリプタとの入出力処理に移ること

非同期I/Oとは?

  • ノンブロッキングI/Oと同じだが,先にエラーや完了をプログラムに通知するためのインターフェースがある

Nginxのプロセス構成は?

  • マスタプロセスが一つと,ワーカープロセスが複数ある
  • マスタプロセスが起動や設定を管理するので,マスタプロセスに対して特定のシグナルを送ると全体のプロセスを制御できる

インストールと起動

基本設定

設定ファイル名とその確認方法は?

  • nginx.confで,確認コマンドは
    $ nginx -V

ディレクティブとは?

  • 設定ファイルの各項目のこと

ディレクティブの種類は?

  • ;で終わるシンプルなディレクティブと,
    ブロックディレクティブがある

コンテキストとは?

  • ブロック内のディレクティブのこと

バーチャルサーバーとは?

  • Serverブロックディレクティブで囲んだサーバーで,IP,ポート,ホスト名毎に設定できる

Rootディレクティブのデフォルト値は?

  • html

MIMEタイプとは?

  • Content-typeヘッダフィールドに指定されるファイルの種類と拡張子のこと.image/pngとか

ルーティングの仕組みを具体的に説明すると?

静的なWebサイトの構築

locationディレクティブとは?

  • [servername]/images/~.pngとかでリクエストが送られた場合に,/images/で来たら/var/www/imgにルーティングするなどの設定のこと

Dos攻撃対策となるディレクティブは?

  • limit_conn_zoneディレクティブで特定のIPなどから同時にコネクションする数を制限できる.
    ngx_http_limit_req_moduleで時間あたりのリクエスト数を制限できる

leaky bucketアルゴリズムを説明できる?

  • 10r/sで1秒に10リクエストまで許容しており,burst=50で入り切らなかった分は50までキューイングし,それでも超えたら503を返す

安全かつ高速なHTTPサーバーの構築

HTTPSとはどのレイヤーで暗号化されている?

  • TLS(Transport Layer Security)

TLSを実現するために使用しているライブラリは?

  • OpenSSL

暗号化スイートとは?

PFSとは?

  • Perfect Forward Secrecyの略で,ある期間の鍵が盗まれたとしてもその一定期間の通信しか複合できないようにする仕組み

HSTSとは?

  • HTTPS通信のみを行うようにする技術.HTTPをHTTPSにリダイレクトさせる方法だと,MITM(Man in the Middle,中間者攻撃)に弱い.

Webアプリケーションサーバーの構築

リバースプロキシの主な2つの役割とは?

フロントサーバーとしてのリバースプロキシの役割を3つ挙げるなら?

Webアプリケーションサーバーにおけるリバースプロキシの役割を6つ挙げるなら?

  • 静的ファイルの配信
  • リクエストの書き換え
    • Route53もここは担える?
  • アクセス制限,不正なリクエストのフィルタリング
  • gzip圧縮転送
  • リクエストのロギング
  • リクエストとレスポンスのバッファリング

Railsに適したサーバープロセスとその理由は?

  • Unicornで,Rackインターフェースを持っているから

Unicornの弱点は?

  • forkを用いたマルチプロセスにはなっているが,イベント駆動型でないため,プロセス数以上のリクエストを処理できない

RailsUnicornを入れるためのgemは?

  • unicornをそのまま.foremanもプロセス管理が楽になるから良い.

nginxでプロキシするときに,ユーザーリクエストのホスト情報をいれるためにはどうする?

  • proxy_set_headerディレクティブで指定する

大規模コンテンツ配信サーバーの構築

ロードバランサの種類を2つ挙げるなら?

  • TCPレベルで分散するL4ロードバランサ
  • HTTPレベルで分散するL7ロードバランサ

L4ロードバランサの方式を2種類挙げるなら?

  • NAT(Network Adress Translation:ネットワークアドレス変換)方式
  • DSR(DIrect Server Return)方式

NAT方式を簡単に説明すると?

  • ネットワークパケットの送信先アドレスを書き換えることで実現する.
    TCPを使用していればどのプロトコルでも分散できる

DSR方式を簡単に説明すると?

  • アップストリームからの帰りのパケット(行きよりサイズが大きい)はロードバランサを経由しないため,トラフィックを削減できる

L7ロードバランサを簡単に説明すると?

  • HTTPリクエストを解釈し,同じリクエストをアップストリームサーバーに送信するため,コンテンツの種類や内容に応じてカスタマイズ可能.
  • HTTPをプロキシするため,DSR方式は使用できないが,ディスクI/OやCPUといったハードウェアの負荷削減には有効

DNSを使ってロードバランスする仕組みをなんと言う?また簡単に説明すると?

DNSラウンドロビンの弱点は?

  • TTL(Time To Live パケット有効期間)の関係で,障害発生時にキャッシュのTTLが切れるまでHTTPサーバーを切り離せない
  • RFC3484では,ネットワークが近いアドレスを優先的につなぐため,ネットワークがまたがるとアドレスに偏りが出る

Webサーバの運用とメトリクスモニタリング

Luaによるnginxの拡張

OpenResty

注意点

後半は個人的にまだ必要でなかったので,ほとんど流しています.

参考

以下の記事を参考にさせていただきました.

nginx実践入門 (WEB+DB PRESS plus)

nginx実践入門 (WEB+DB PRESS plus)

http://ecogis.sfc.keio.ac.jp/online/java/2002/9th/basic.htm

qiita.com

本記事について

本記事は,学習を目的に書かれています.

間違い,改良案などございましたら,コメントしていただけると幸いです.

基本的に編集途中ですので,何を書いてほしいかもコメントいただけると,

その情報を中心に追記します.