Nginx

Nginxとは?

Nginxは、ロシアの開発者Igor Sysoevが開発した無料のオープンソースWebサーバーである。

Apacheの代替として提案されたWebサーバーソフトウェアである。Apacheには、多数の同時接続時の処理に弱いという問題があった。クライアントが1万台程度になると問題が発生することがある。 そこで、高負荷に強いWebサーバーソフトウェアとして開発されたのがNginxである。

Webサーバーとは?

外部から入ってくるリクエストを受け取り、Webサーバーで静的コンテンツを応答し、アプリケーションサーバーに動的コンテンツを要求する場合は、アプリケーションサーバーの処理結果をクライアントへ応答する。

このWebサーバーに該当するものがNginxである。

ApacheとNginxの違い

Nginxとよく一緒に取り上げられるのがApacheである。Apacheは代表的なWebサーバーである。Nginxはもともと、Apacheや一般的なWebサーバーが持つ、大量同時アクセスへの応答が悪くなる問題を解決するために生まれた。

主な違い

Apacheの特徴

  • Webサーバーとしての機能が豊富で使いやすい。
  • 多機能な分、サーバーコストは高い。

Nginxの特徴

  • Webサーバーとの仲介役となりリクエストに応答するリバースプロキシ機能があり、同時リクエストの処理に特化している。
  • non-blocking I/Oをサポートしており、大量データ転送と大量同時接続に特化している。
  • シンプルなためサーバーコストが低い。
  • 利点として、Webサーバーの存在を隠すことができ、Webサーバーが複数ある場合には処理を分散できる。つまり、ロードバランサーのような機能を果たす。これにより、多数の同時リクエストに強いという特徴を持つ。

ApacheとNginxの動作方式

Apacheはマルチプロセスのプロセス中心アーキテクチャである。

  • 各リクエストをプロセスに割り当てるため、大量のリクエストが来るとプロセスが同時に起動し、オーバーヘッドが非常に大きくなるという欠点がある。

Nginxはシングルスレッドモデルのイベント駆動アーキテクチャである。

  • Node.jsのようなイベントループ方式である。これは、単一スレッドでループを回し、キューに蓄積されたイベントを処理していく方式である。
  • イベントループ方式を採用することで、少数のプロセスだけで大量のリクエストを処理できる。
  • これによりC10K問題を解決できる。

Nginxのインストール

Macでのインストール

brew コマンドを使用してインストールする。

% brew install nginx

次のコマンドを実行し、http://localhost:8080 にアクセスしてみる。

% nginx

次のコマンドで停止する。

% nginx -s stop

設定ファイルは次の場所に存在する。

/usr/local/etc/nginx/nginx.conf

CentOSでのインストール

/etc/yum.repos.d/nginx.repo を作成する。

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

yum コマンドでインストールする。

$ sudo yum install nginx

Nginxコマンド

起動

nginx

停止

CentOS 6、Amazon Linux

nginx -s stop

CentOS 7、Amazon Linux 2

systemctl stop nginx

再起動

CentOS 6、Amazon Linux

/etc/init.d/nginx restart

CentOS 7、Amazon Linux 2

systemctl restart nginx

スタートアップ登録

CentOS 7、Amazon Linux 2

systemctl enable nginx # 登録
systemctl disable nginx # 削除

設定の再読み込み

CentOS 6、Amazon Linux

nginx reload
service nginx reload

CentOS 7、Amazon Linux 2

systemctl reload nginx

設定ファイルチェック

nginx -t

設定ファイルの場所

メイン設定ファイル

cd /etc/nginx/

各サーバー設定ファイル

cd /etc/nginx/conf.d/