この記事には広告を含む場合があります。
記事内で紹介する商品を購入することで、当サイトに売り上げの一部が還元されることがあります。
この記事ではnginxをcentOS7にインストールする方法と設定ファイルを解説します。
- プログラミング初学者
- Nginxのインストール方法を知りたい人
- Nginxの設定ファイルの内容を理解したい人
この記事を読めばnginxのインストール方法や設定ファイルの内容が分かります!
では早速見ていきましょう!
Nginx(エンジンエックス)とは?
NginxはApacheのc10k問題を解決するために考案された「webサーバー」です。
webサーバーとは?
Webサーバーはブラウザからのリクエストを受けて、静的なファイルをブラウザに返したりアプリケーションサーバーにリクエストを送る役割を担うソフトウェアのことです。
Apacheは世界的にも有名なwebサーバーで人気がありますが、大量同時接続に弱いという弱点(c10k問題)があります。
それを補うために考案されたものがNginxです。
少し前はapacheが世界シェアトップでしたが、2019年の4月にNginxがその座を奪取しました。最近は国内でも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