アプリ王国って?

Nginxの設定ファイルとインストールの方法解説!

この記事には広告を含む場合があります。

記事内で紹介する商品を購入することで、当サイトに売り上げの一部が還元されることがあります。

この記事ではnginxをcentOS7にインストールする方法と設定ファイルを解説します。

対象の読者
  • プログラミング初学者
  • Nginxのインストール方法を知りたい人
  • Nginxの設定ファイルの内容を理解したい人

この記事を読めばnginxのインストール方法や設定ファイルの内容が分かります!

では早速見ていきましょう!

Nginx(エンジンエックス)とは?

NginxはApacheのc10k問題を解決するために考案された「webサーバー」です。

webサーバーとは?

Webサーバーはブラウザからのリクエストを受けて、静的なファイルをブラウザに返したりアプリケーションサーバーにリクエストを送る役割を担うソフトウェアのことです。

Apacheは世界的にも有名なwebサーバーで人気がありますが、大量同時接続に弱いという弱点(c10k問題)があります。

それを補うために考案されたものがNginxです。

少し前はapacheが世界シェアトップでしたが、2019年の4月にNginxがその座を奪取しました。最近は国内でもNginxの方が使われている印象ですね。

ほろよい

c10k問題を解決するために生まれたのがNginx!

Nginxのインストール方法

実際にcentOS7にNginxをインストールしてみましょう!

今回はVagrantでcentOSの仮想環境を用意しました。

リポジトリの追加

NginxはcentOSにプリインストールされていないので自分でリポジトリを準備しなければなりません。

今回は /etc/yum.repos.d/ に nginx.repo を手動で作ります。

$ sudo vi /etc/yum.repos.d/nginx.repo

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

yum info nginx を実行してみましょう。

リポジトリが正しく追加されていれば情報が表示されるはずです。

$ yum info nginx

読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
 * base: ftp.jaist.ac.jp
 * extras: ftp.jaist.ac.jp
 * updates: ftp.jaist.ac.jp
利用可能なパッケージ
名前       : nginx
アーキテクチャー : x86_64
エポック     : 1
バージョン    : 1.16.1
リリース     : 1.el7.ngx
容量       : 766 k
リポジトリー   : nginx/x86_64
要約       : High performance web server
URL            : http://nginx.org/
ライセンス       : 2-clause BSD-like license
説明            : nginx [engine x] is an HTTP and reverse proxy server, as well as a mail proxy server.

これでリポジトリの準備は完了です!

Nginxのインストール

Nginxのパッケージを確認できたので yum install でインストールしましょう。

$ sudo yum install nginx

これでnginxのインストールは完了です。簡単ですね!

Nginxの起動

centOS7系からはsystemctlコマンドで起動することができます。

$ sudo systemctl start nginx //nginx起動

$ ps aux|grep nginx //確認
root      2264  0.0  0.1  46448   964 ?        Ss   01:03   0:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
nginx     2265  0.0  0.4  46856  2160 ?        S    01:03   0:00 nginx: worker process

psコマンドでプロセスを確認できれば起動に成功しています。

自動起動の設定

システムを再起動した時にNginxが起動するように設定しておきましょう。

今の設定がどうなっているか確かめるために以下のコマンドを実行します。

$ systemctl list-unit-files --type=service|grep nginx
nginx.service                                 disabled

disabled になっているので、下記コマンドを実行してenabledに変更します。

$ sudo systemctl enable nginx //自動起動をONにする

$ systemctl list-unit-files --type=service|grep nginx //確認
nginx.service                                 enabled

表示がenabledに変わっていれば設定完了です!

これでサーバーを再起動しても自動的にNginxが起動するようになりました!

ブラウザからアクセスしてみる

Nginxを起動したサーバーのIPアドレスをブラウザで叩いて、Nginxにアクセスしてみましょう!

nginxのデフォルトポートは80番なのでブラウザではポート番号を省略しても大丈夫です。ブラウザではポート番号を指定しない場合IPアドレスの後ろに:80が補完されます。

このような画面が表示されればOKです!

Nginxだけでも静的なファイルであればブラウザに返すことができますが、ユーザによって表示が異なるページなど、動的なファイルを返す場合はアプリケーションサーバと連携する必要があります。

一般的にNginx単体で運用することはなく、unicornなどのアプリケーションサーバと連携させて使うことが殆どです。

nginxとunicornの連携方法については別途記事を書こうかなと思います!

nginxの設定ファイル

ここからは設定ファイルをひとつずつ見ていきましょう!

設定ファイルの初期設定はこのようになっています。

user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    keepalive_timeout  65;

    include /etc/nginx/conf.d/*.conf;
}
server {
    listen       80;
    server_name  localhost;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

コンテキストとディレクティブ

まず最初にNginxの設定ファイルの決まりごとを確認しましょう。

コンテキスト

nginx.conf を見ると http{ } のように { } で囲われている固まりがありますよね。この { } で囲われた範囲をコンテキストと呼びます。

nginx.conf を例にすると events{ } とhttp{ } がそうですね。eventsコンテキスト、httpコンテキストと呼んだりします。ちなみに { } で囲まれていない範囲はmainコンテキストとして扱われます。

ディレクティブ

コンテキストの中に書かれている include hoge; や default_type hoge; のような形で書かれているものはディレクティブと呼びます。ちなみにhttp{ } のhttpもhttpコンテキストを定義するためのディレクティブです。

ディレクティブはコンテキスト内ならどこにでも書ける訳ではなく、コンテキストによって書けるディレクティブが決められています。

また default.conf 行目の location のようにディレクティブは他のディレクティブを内包することもあります。

ほろよい

コンテキストとディレクティブで構成されているんだね!

各ディレクティブの解説

以上を踏まえてコンテキスト毎にディレクティブの解説をしていきます!

mainコンテキスト

user

ワーカープロセスの実行ユーザを指定できます。デフォルトはnginx。

worker_processes

ワーカープロセスの数を指定できます。

よく分からない場合はautoを設定しておけば問題ありません。

error_log

エラーログの出力先を指定できます。

後ろについてる warn はログレベルを示していて、debug, info, warn, error, crit, alert, emerg から選択できます。

pid

Pidファイルの出力先を指定できます。

eventsコンテキスト

worker_connections

ワーカーが処理できるコネクション数を設定できます。worker_processesと同じで初学者の内はデフォルトのままで問題ありません。

httpコンテキスト

Include

他の設定ファイルを取り込むものです。今回は/etc/nginx/conf.d/以下にある拡張子が.confのファイルと /etc/nginxmime.types の2つのファイルを取り込んでいます。ちなみに読み込むファイルも同じようにコンテキストとディレクティブの形式で書かれている必要があります。

types

typesディレクティブは拡張子とMIMEタイプを関連付けするものです。

拡張子とMIMEタイプを関連付けておくと、例えばhtmlファイルをブラウザに返す時に今から返すファイルは “text/html”のMIMEタイプですよー とブラウザに伝えることができます。

ブラウザはこのMIMEタイプを見ることで受け取ったデータを正しく処理することができます。

types {
    text/html                                        html htm shtml;
    text/css                                         css;
    text/xml                                         xml;
    image/gif                                        gif;
    image/jpeg                                       jpeg jpg;
    application/javascript                           js;
    application/atom+xml                             atom;
    application/rss+xml                              rss;
    ・・・
    video/x-msvideo                                  avi;
}

default_type

MIMEタイプを見つけられなかった時に返すMIMEタイプを指定しています。

application/octet-stream はMIMEタイプの1つで、ファイルの種類が分からない時に使われるものです。

log_format

アクセスログのフォーマットをここで決めることができます。

$remote_addr のように$で始まる文字列はNginxの変数で、リクエストに応じて値が入ります。

access_log

アクセスログの出力先を指定できます。

keepalive_timeout

nginxとブラウザの接続タイムアウトの時間を指定します。

serverコンテキスト

listen

nginxを起動するポートを指定します。デフォルトは80番。

server_name

ホスト名を指定します。HTTPリクエストのHostヘッダとここに書いた名前が一致した場合にこのserverコンテキスト内の設定が使用されます。

location

URL毎の設定を行うためのディレクティブです。ディレクティブの後ろに書いてあるパスに最も一致している設定が適用されます。

例えば 5行目の location / { } の場合は全てのリクエストにその{ }内の設定が適用されますが、リクエストURLが /50x.html の場合は default.conf 12行目の設定が適用されます。

locationディレクティブのパスは最長一致であることを覚えておきましょう!

root

ドキュメントルートを設定するディレクティブです。

例えば /hello.html にアクセスした場合、/usr/share/nginx/html/hello.html が返されることになります。

デフォルトの場合は 50x.html と index.html の2つだけが用意されています。

$ ls -al /usr/share/nginx/html/
-rw-r--r--. 1 root root 494  8月 13  2019 50x.html
-rw-r--r--. 1 root root 612  8月 13  2019 index.html

index

urlが / で終わっている時に返すファイルを指定するディレクティブです。

error_page

エラーコードが発生した時に返すページを設定できます。

今回の場合だと500 502 503 504 いずれかのエラーが起きた時に ドキュメントルート/50x.html が返されるようになっています。

まとめ:Nginxは必ず抑えておこう!

Nginxのインストールから設定ファイルまでざっくり解説させて頂きました。

現場ではnginxが使われていることが多いので今までApacheしか触ったことのない初学者の方もインストール方法や基本的な設定は抑えておきましょう。

Nginxの設定は奥が深いので実務経験を積みながら少しずつ学んでいくのがおすすめです。

実際に自分でもインストールしてみて触ってみると良い勉強になると思います!

最後まで読んで頂きありがとうございましたm(_ _)m

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です