Nginx(エンジンエックス)は、Webサーバの選択肢として必ず候補に挙がってくるくらい有名になりました。
Nginxとは、いったい何なのでしょうか?
Apacheと比べて、どのような違いがあるのでしょうか?
今回は、そんなNginxの概要やインストール方法、設定ファイルの仕組みまでを紹介します。
もくじ
Nginxとは
Nginx(エンジンエックス)とは、Webアプリケーションと連携するために利用されるWebサーバの1つです。
RubyやPHPなどで開発したWebアプリケーションを、インターネット上に公開するために必要になります。

NginxとApacheの違い
Webサーバといえば、Nginx以外にも「Apache(アパッチ)」という大きな存在があります。
NginxとApacheの違いは、何なのでしょうか?
実は、Apacheの「クライアント1万台問題(C10K問題)」を解消するために作られたWebサーバが、Nginxなんです。
クライアント1万台問題(C10K問題)とは
クライアント1万台問題(C10K問題)とは、約1万台ものアクセスがApacheサーバに集中し、ハードウェア性能に関係なく、レスポンス性能が大きく下がる問題です。
この原因は、「クライアントのリクエストの数だけプロセス(スレッド)を作る」という、Apacheの駆動方式が原因でした。
駆動方式の違い
さきほどの「C10K問題」を解決するために作られたWebサーバが「Nginx」です。
Apacheは、アクセスの数だけプロセス(スレッド)を作る方式になっていますが、Nginxはイベント駆動方式になっています。
Nginxのイベント駆動は、CPUの数と同じ数のプロセスを用意し、受け取ったリクエストを順番に高速で処理していく仕組みです。
プロセスを作らない分、コンテキストスイッチ(1つのCPUが複数のプロセスを切り替えながら処理すること)なども減り、結果メモリの使用量を抑えられます。
ちなみに、Apacheのメリットはこんな感じ。
- 動的コンテンツなどの重たい処理が得意
- PHPとの相性がいい
- そこまで知識がなくても簡単に連携できる
また逆に、Nginxは動的コンテンツなどの処理は苦手なので、重たい処理はアプリケーションサーバに任せるなどの対策が必要です。
Nginxのインストール(CentOS7)
では、さっそくCentOS7にNginxをインストールしていきます。
CentOS7のデフォルトリポジトリにNginxは存在しないので、Nginxを提供しているリポジトリを別に追加します。
$ sudo yum localinstall -y http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
$ sudo yum install -y nginx

Nginxのコマンド
Nginxの状態確認
Nginxの起動状態を確認したいときは、以下のコマンドを実行します。表示されるログで「停止中」か「起動中」かを確認できます。
$ systemctl status nginx
● nginx.service - nginx - high performance web server
Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; vendor preset: disabled)
Active: inactive (dead)
Docs: http://nginx.org/en/docs/
$ systemctl status nginx
● nginx.service - nginx - high performance web server
Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; vendor preset: disabled)
Active: active (running) since Mon 2019-04-22 05:44:30 UTC; 3s ago
Docs: http://nginx.org/en/docs/
Process: 5048 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS)
Main PID: 5049 (nginx)
CGroup: /system.slice/nginx.service
├─5049 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
└─5050 nginx: worker process
Nginxの起動
Nginxを起動したいときは、以下のコマンドを実行します。
$ sudo systemctl start nginx
Nginxの停止
Nginxを停止させたいときは、以下のコマンドを実行します。
$ sudo systemctl stop nginx
Nginxの再起動
Nginxを再起動したいときは、以下のコマンドを実行します。
$ sudo systemctl restart nginx
Nginxの自動起動設定
CentOSが再起動したときに、自動でNginxが起動するように設定します。
「disabled(無効)」から「enabled(有効)」に変われば設定完了です。
# Nginxの自動起動設定を確認
$ systemctl is-enabled nginx
disabled
# Nginxを自動起動に設定
$ sudo systemctl enable nginx
Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to /usr/lib/systemd/system/nginx.service.
# Nginxの自動起動設定を確認
$ systemctl is-enabled nginx
enabled
Nginxにアクセス
Nginxを起動したら、サーバのIPアドレスをブラウザに入力してアクセスしてみましょう。上のような画面が表示されていれば、アクセスは成功。
「Linux環境構築」を読んでLinux環境を作った方は、「http://192.168.33.10」でアクセスできるはずです。

Nginxの設定ファイル
Nginxをインストールした段階では、「Welcome to nginx!」という初期画面が表示されますが、このまま使い続ける人は少ないはずです。
おそらく、Nginxの設定ファイルを書き変えて、オリジナルのアプリケーションと連携させることが最終目標になると思います。
ですが、その前にNginxが初期画面を表示するまでの仕組みを、1つずつ確認していきましょう。
基本的な仕組みを理解していなければ、高度な設定をする際に詰まってしまう原因になるからです。
Nginxの設定ファイルの場所
Nginxの設定ファイルが置いてある場所は「/etc/nginx」です。
これは、yumでインストールした各サーバの設定ファイルは、「/etc」ディレクトリの下に作られるという決まりがあるからです。
Nginxもこれに従い、「/etc/nginx」ディレクトリがインストールと同時に自動生成されるのです。

ディレクティブとは
ここから先に出てくるNginxの設定ファイル内の「server」や「listen」、「location」などの項目を「ディレクティブ」といいます。
Nginxの設定はこのディレクティブを指定し、続けてどのような動きをさせたいのかを記述することで、設定していきます。
設定ファイルが読み込まれる順番
Nginxの設定ファイルはデフォルトで2つあり、以下の順番で読み込まれます。
- /etc/nginx/nginx.conf
- /etc/nginx/conf.d/default.conf
これは、「nginx.conf」ファイルを確認することで説明できます。
$ cat /etc/nginx/nginx.conf
user nginx;
worker_processes 1;
:
:
include /etc/nginx/conf.d/*.conf;
}
ここで注目してほしいのは、「include /etc/nginx/conf.d/*.conf;」という記述です。
「include」ディレクティブで、読み込むファイルを指定しています。
ここでは「/etc/nginx/conf.d/*.conf」のパターンにマッチするファイルを読み込むという意味になります。
つまり、さきほど紹介した「/etc/nginx/conf.d/default.conf」も、このパターンに見事マッチしますね。
これが、Nginxの設定ファイルの読み込み順の仕組みです。
ドキュメントルートの場所
Nginxにブラウザからアクセスすると「Welcome to nginx!」という初期画面が表示されましたが、これはデフォルトのドキュメントルートにHTMLファイルが置かれているからです。
ドキュメントルートとは、Webサーバにアクセスがあった際に参照するディレクトリのことです。
ドキュメントルートやHTMLファイルについては、「/etc/nginx/conf.d/default.conf」を開くことで確認できます。
$ cat /etc/nginx/conf.d/default.conf
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
:
:
}
「root /usr/share/nginx/html;」でドキュメントルートを指定し、「index index.html index.htm;」でデフォルトで参照するファイルが指定されています。
つまり、Nginxにアクセスがあると、「/usr/share/nginx/html」ディレクトリの「index.html(なければ「index.htm」)」を参照する設定になっているのです。
初期画面のファイルを確認
Nginxの初期画面として表示されたHTMLファイルのパスがわかれば、中を開いて確認することもできますね。
$ cat /usr/share/nginx/html/index.html
まとめ:NginxとWebアプリを連携させよう!
Nginxのインストール方法や、初期画面が表示される設定ファイルの仕組みを紹介しました。
これで、Nginxの基本は十分です。
次は、Webアプリケーションとの連携にチャレンジしてみましょう!
Railsアプリと連携させたい方は「Nginxの設定」を読んで、Pumaとのソケット通信にも挑戦してみてくださいね。
またね、キツネ(@kitaaaa_kitsune)でした!

