Open14
nginxについて学ぶ
携わっている開発でnginxを使っているが、知識が全然ないので勉強する。単純な興味もある。
やること
- nginxについて調べてメモ
- nginxを実際に使ってみて学ぶ
nginxの概要
- nginx (エンジンエックス)は、HTTPおよびリバースプロキシサーバ、メールプロキシサーバ、および汎用TCP/UDPプロキシサーバ。
- 初版は2004年に出ている。
- DropboxやNetflixでも使われているらしい。
初見読み方わからなくて、無理矢理「ネグイネクス」とか読んでた記憶。
nginxの特徴
メリット・デメリット
- 大規模な処理や並列処理が得意で高速
- メモリ消費量が少ない
- 静的コンテンツに向いていて、動的コンテンツの処理が苦手
主な用途
- 静的コンテンツのwebサーバ
- リバースプロキシ
- ロードバランサー
Apacheとの比較
比較項目 | Nginx | Apache |
---|---|---|
動的コンテンツの配信 | 外部のアプリケーションサーバと連携 | モジュールによる直接処理が可能 |
静的コンテンツの配信 | 高速 | 大量接続時の性能は劣る |
メモリ消費量 | 少 | 大量接続時は多い |
並列処理性能 | 高(イベント駆動型) | 中程度(プロセス/スレッドベース) |
並列処理の戦略
イベント駆動型
- 各接続に対して独立したプロセスやスレッドを生成する必要がないため、CPUとメモリの使用が抑えられ、大量の同時接続を効率的に処理できる。
- 同じスレッドで実行される異なるタスク間でエラーが伝播する可能性がある
プロセス/スレッドベース
- 各タスクが独立しているため、理解や開発が容易でエラーが発生しても他のプロセス/スレッドには影響しない
- 大量のプロセス/スレッドを生成すると、それに伴うリソース(CPU、メモリ等)の消費が大きくなる
プロキシについて
プロキシ(フォーワードプロキシ)
- クライアント側に設置
- クライアント(ユーザー)のリクエストを代理でインターネットに送り、結果をクライアントに返す
- プロキシ(proxy)は代理という意味
リバースプロキシ
- サーバー側に設置
- インターネットからのリクエストを内部のサーバーに転送し、その結果をインターネットに返す
- 一般的なプロキシとは逆方向(リバース)に働くのでリバースプロキシ
プロキシを使う理由
- セキュリティ強化
- キャッシュによるパフォーマンス改善
リバースプロキシはこれに加えて、負荷分散やSSL/TLS終端なども
負荷分散
- 外部のクライアントによるアクセスをうまく分散させて負荷が集中しないようにする
SSL/TLS終端
- リバースプロキシはSSL/TLS終端の役割を果たすことができ、アプリケーションサーバーの負荷を軽減できる
nginx実践
開発でもDockerを使っていて、管理がしやすいので学習にもDockerを使う
簡単な表示まで
簡単にDockerflieとdocker-compose.ymlを記述。
ディレクトリ構造
root
|── nginx
│ └── Dockerfile
└── docker-compose.yml
Dockerfile
# ベースとなるDockerイメージを指定
FROM nginx
docker-compose.yml
version: "3" # 使用するdocker-composeのバージョン
services: # 定義するサービス(コンテナ)を列挙
nginx: # サービス名
build: # Dockerfileからイメージをビルドする
context: ./nginx # Dockerfileがあるディレクトリのパス
dockerfile: Dockerfile # ビルドに使用するDockerfileの名前
ports: # ポートのマッピングを指定
- "80:80" # ホストの80番ポートとコンテナの80番ポートをつなぐ
docker-compose up
を実行して、localhost
にアクセスしたら「welcome to nginx」が表示された
nginxのコンテナをビルドして起動すると、デフォルトで「Welcome to nginx!」というメッセージを表示するウェブページが配信される