Nginxとは?CentOS7へのインストールや設定ファイルの仕組みを解説

Nginxのインストール

Nginx(エンジンエックス)は、Webサーバの選択肢として必ず候補に挙がってくるくらい有名になりました。

Nginxとは、いったい何なのでしょうか?

Apacheと比べて、どのような違いがあるのでしょうか?

今回は、そんなNginxの概要やインストール方法、設定ファイルの仕組みまでを紹介します。

Nginxとは

Nginxとは

Nginx(エンジンエックス)とは、Webアプリケーションと連携するために利用されるWebサーバの1つです。

RubyやPHPなどで開発したWebアプリケーションを、インターネット上に公開するために必要になります。

キツネ

Webサーバがないと、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
Nginxをインストール
$ sudo yum install -y nginx

上の2つとも、正常にインストールできれば「Complete!」と表示されます。

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を起動したいときは、以下のコマンドを実行します。

Nginxを起動
$ sudo systemctl start nginx

Nginxの停止

Nginxを停止させたいときは、以下のコマンドを実行します。

Nginxを停止
$ sudo systemctl stop nginx

Nginxの再起動

Nginxを再起動したいときは、以下のコマンドを実行します。

Nginxを再起動
$ sudo systemctl restart nginx

Nginxの自動起動設定

CentOSが再起動したときに、自動でNginxが起動するように設定します。

「disabled(無効)」から「enabled(有効)」に変われば設定完了です。

Nginxを自動起動するように設定
# 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の初期画面

Nginxを起動したら、サーバのIPアドレスをブラウザに入力してアクセスしてみましょう。上のような画面が表示されていればアクセス成功です。

初心者のためのLinux環境構築!VagrantとVirtualBoxの使い方を解説!」を読んで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つあり、以下の順番で読み込まれます。

  1. /etc/nginx/nginx.conf
  2. /etc/nginx/conf.d/default.conf

これは、「nginx.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」を開くことで確認できます。

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ファイルのパスがわかれば、中を開いて確認することもできますね。

index.htmlを確認
$ cat /usr/share/nginx/html/index.html

まとめ

Nginxのインストール方法から、初期画面が表示される設定ファイルの仕組みまでを紹介しました。

Nginxの基本を理解できたら、次はWebアプリケーションとの連携にチャレンジしてみましょう。

Railsと連携したい人は「【Nginxの設定】Rails(Puma)とソケット通信で連携させる!」をどうぞ。

テキストのコピーはできません。