Nginxとは2002年にIgor Sysoev氏によって開発され、2004年に一般公開されたOSS(Open Source Software)のWebサーバソフトウェアです。
Webサーバはサイトを公開・管理する際に使われ、ホームページなどを閲覧する際に使用されています。今回はNginxとはどんなソフトウェアなのか、そして実際にEC2環境へのインストール方法についてご紹介します。
NginxとApache
Nginxを語る上で重要となってくるのがライバル的存在であるApacheです。
Apachについてはこちらの記事で詳しく解説しています。
https://envader.plus/article/70
ApacheもNginxと同じOSSのWebサーバソフトウェアで20年以上の歴史を持ち、長らくWebサーバソフトウェアのシェア率トップを誇っていました。Apacheは動的コンテンツを得意としており、重い処理が必要な動画配信サイトや大規模なオンラインショップなどに向いています。
ですが、Apacheにも苦手とすることがあり、その1つに大量アクセスがあります。Apacheは基本的にマルチプロセスとなっており、1リクエストに対して1プロセスで処理を行います。そのためApacheは同時接続のリクエストが増えれば増えるほどプロセスが増加し、サーバのメモリを消費してしまうため快適な動作が行えなくなってしまいます。その他にC10K問題があります。
C10K問題とはハードウェアやネットワーク性能に問題がなくともクライアントの同時接続数がある一定数を超えるとサーバがパンクしてしまう問題のことを指します。実はNginxはこういった大量同時接続や大容量のデータ配信に耐えることを目的に設計されたWebサーバソフトウェアなのです。
比較項目 | Nginx | Apache |
---|---|---|
静的コンテンツの処理 | ◎ | ○ |
動的コンテンツの処理 | × | ○ |
並列処理性能 | ◎ | △ |
小さいリソースで動作 | ○ | △ |
セットアップの容易性 | △ | ○ |
Nginxの特徴
長らくWebサーバソフトウェアのシェア率トップはApacheでした。ですが、2023年現在、NginxはApacheを抜いてシェア率1位を誇るWebサーバソフトウェアとなりました。そんなNginxにはどのような特徴があるのか見ていきましょう。
1.無料で使用できる
Nginxは無料で使用することが可能なオープンソースソフトウェアです。そのためハードウェア環境さえ用意してしまえば無料で誰でも気軽に使用することができます。ただし、メーカーからの補償やサポートなどは存在しないため、設定からトラブル時の対処までユーザーで対応を行わないといけません。
2.高速で軽快に作動するWebサーバ
Nginxではイベント駆動型のアーキテクチャが使用されています。イベント駆動型とはクライアントのアクセスをイベントとして扱い、それをトリガーにプロセス内で処理を行う方法です。これにより同時接続数が多くなってもプロセス数やスレッド数は増えないため、メモリ消費量を抑え高速でストレスフリーな動作を実現します。そのため同時接続数が多い大規模なサイトでの使用に向いています。
3.静的コンテンツに適している
HTMLや画像などの静的コンテンツを配置してキャッシュしておくことが可能で高速に配信することができます。動的なコンテンツを扱いたい場合はNginxをリバースプロキシとして利用し、バックエンドにアプリケーションサーバを置くことで苦手とする動的なコンテンツも扱えます。
Nginxの機能
NginxはHTTPサーバとしての使用だけでなく、リバースプロキシやロードバランサーなど様々な用途で使用することができます。
リバースプロキシ
リバースプロキシとは複数のクライアントから受けたリクエストをインターネット上の異なるサーバへ転送する仲介役のサーバを指します。
リバースプロキシはサーバの前段に設置され、クライアントからのアクセスを一手に引き受けます。仕組みは次のとおりです。
- クライアントからサーバに対するリクエストをリバースプロキシが受け取る
- リバースプロキシがサーバにリクエストを中継
- サーバからのレスポンスをリバースプロキシが受け取る
- サーバの代わりにリバースプロキシがクライアントへレスポンス
これにより異なるアプリやプラットフォームを構築していてもリバースプロキシにより1つのWebサイトとして運用できます。
ロードバランサー
ロードバランサーとは負荷分散装置とも呼ばれクライアントのアクセスを複数のサーバへ分散させて負荷が集中しないようにする装置です。
Webサーバなど多くの人がアクセスするシステムを運用しているとアクセスが集中してしまい、サーバの動作が重くなったり最悪の場合サーバがダウンしてしまうことがあります。こういった障害は提供するサービス自体が停止してしまうことに繋がり、特に企業にとっては大きな問題となります。そのような自体を未然に防ぐために、アクセスが集中した場合に複数のサーバへ分散させて処理を行うのがロードバランサーです。仕組みは次のとおりです。
- クライアントからのリクエストをロードバランサーが受け取る
- ロードバランサーが負荷状況に応じて通信を振り分ける
- ロードバランサーからサーバへ通信が行われる
- サーバからロードバランサーへレスポンスが行われる
- ロードバランサーがクライアントにレスポンスをする
振り分け方としてIPアドレスやポートによって振り分けるパターンと通信の内容によって振り分けるパターンがあります。
AWSのEC2にNginxをインストールする
Nginxのインストールはとても簡単に行えます。今回はAWSのEC2にNginxをインストールします。
※EC2のセットアップについては割愛。
1.ターミナルからEC2インスタンスに接続
まずはEC2のインスタンスにSSH接続します。
$ ssh -i "[キーペア名].pem" ec2-user@[ec2ドメイン]
次のような接続の確認メッセージが表示されるのでyesと入力します。
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
次のような画面が出れば接続成功です。
Warning: Permanently added 'ec2-xx-xx-xx-xx.ap-northeast-1.compute.amazonaws.com,xx.xx.xx.xx' (ECDSA) to the list of known hosts.
__| __|_ )
_| ( / Amazon Linux 2 AMI
___|\\___|___|
<https://aws.amazon.com/amazon-linux-2/>
8 package(s) needed for security, out of 14 available
Run "sudo yum update" to apply all updates.
[ec2-user@ip-xx-xx-xx-xx ~]$
2.Nginxをインストール
インスタンスに接続することができたらNginxのインストールを行います。次のコマンドでamazon-linux-extrasがインストール済みか確認します。
$ which amazon-linux-extras
/usr/bin/amazon-linux-extras
次に以下のコマンドでamazon-linux-extrasを使ってインストールできるNginxのパッケージを確認します。
$ amazon-linux-extras
~ 省略 ~
38 nginx1 available [ =stable ]
~ 省略 ~
いよいよNginxのインストールです。次のコマンドを入力します。
sudo amazon-linux-extras install nginx1
コマンドを入力するとインストールの概要が表示されるためyを入力して進みます。
3.インストールの確認
以下のコマンドを入力し、Nginxがインストールされたかを確認します。インストールが完了していると赤枠のようにNginxのバージョンが表示されます。
$ nginx -v
4.Nginxの起動
以上でNginxのインストールが終了したため、次は起動を行なっていきます。次のコマンドを入力します。
$ sudo systemctl start nginx
起動ができているか次のコマンドで確認してみましょう。
$ systemctl status nginx
Activeの欄が緑色で**active (running)**になっていたら起動できています。
5.テストサイトで確認
ここまで完了するとNginxが用意したテスト用のサイトにアクセスをすることができます。
ブラウザでhttp://[インスタンスのパブリック IPv4 アドレス]
を入力してください。次のようにテスト用サイトにアクセスすることができたら成功です。
任意の文字を表示させる
ここまででEC2にNginxをインストールし、テスト用のサイトを開くことができました。せっかくなのでHTMLファイルを配置し、任意の文字に変更を行なってみましょう。
1.ディレクトリの確認
nginx.conf
を参照し、serverのrootに記載されているディレクトリを確認します。
$ cat /etc/nginx/nginx.conf
# server {
~ 省略 ~
# root /usr/share/nginx/html;
#
~ 省略 ~
2.ディレクトリ移動
確認をしたディレクトリへ移動を行います。
$ cd /usr/share/nginx/html
3.HTML編集
移動ができたらindex.htmlを開き、中身を全て削除し、任意の内容に編集します。
※編集をする際はIキーで入力モードに移って編集を行なってください。編集が終わればescで戻り**:wq**で保存して終了してください。
$ sudo vi index.html
4.確認
index.html
の編集が終わったら先ほどアクセスをした**http://[インスタンスのパブリック IPv4 アドレス]**にもう一度アクセスをしてみてください。先ほど編集を行ったHTMLが表示されていれば成功です。
環境構築することなくWebサーバーインストールを試すにはこちら
https://envader.plus/course/14/scenario/1150
まとめ
Nginxとは2023年現在シェア率トップを誇り、世界中で使用されているOSSのWebサーバソフトウェアです。
Webサーバーについてはこちらの記事で詳しく解説しています。
https://envader.plus/article/69
NginxはWebサーバとしての機能だけでなく、リバースプロキシやロードバランサーとして使うこともできます。C10K問題に対応するべく開発された一面もあり高負荷に強く、同時接続数の多い大規模なサイトなどに向いており、主に静的コンテンツを得意とします。対してApacheは大量の同時接続数に弱く、重い動的コンテンツを得意としているためNginxをリバースプロキシとして使用し、Apacheを組み合わせることでお互いの短所を補った運営を行うことも可能です。
Nginxは誰でも無料で使うことができ、インストールも数分で済んでしまう手軽さなのでまずは本記事を参考にインストールを行い、任意のHTMLファイルを表示する所から始めてみましょう。
【番外編】USBも知らなかった私が独学でプログラミングを勉強してGAFAに入社するまでの話
プログラミング塾に半年通えば、一人前になれると思っているあなた。それ、勘違いですよ。「なぜ間違いなの?」「正しい勉強法とは何なの?」ITを学び始める全ての人に知って欲しい。そう思って書きました。是非読んでみてください。
「フリーランスエンジニア」
近年やっと世間に浸透した言葉だ。ひと昔まえ、終身雇用は当たり前で、大企業に就職することは一種のステータスだった。しかし、そんな時代も終わり「優秀な人材は転職する」ことが当たり前の時代となる。フリーランスエンジニアに高価値が付く現在、ネットを見ると「未経験でも年収400万以上」などと書いてある。これに釣られて、多くの人がフリーランスになろうとITの世界に入ってきている。私もその中の1人だ。数年前、USBも知らない状態からITの世界に没入し、そこから約2年間、毎日勉学を行なった。他人の何十倍も努力した。そして、企業研修やIT塾で数多くの受講生の指導経験も得た。そこで私は、伸びるエンジニアとそうでないエンジニアをたくさん見てきた。そして、稼げるエンジニア、稼げないエンジニアを見てきた。
「成功する人とそうでない人の違いは何か?」
私が出した答えは、「量産型エンジニアか否か」である。今のエンジニア市場には、量産型エンジニアが溢れている!!ここでの量産型エンジニアの定義は以下の通りである。
比較的簡単に学習可能なWebフレームワーク(WordPress, Rails)やPython等の知識はあるが、ITの基本概念を理解していないため、単調な作業しかこなすことができないエンジニアのこと。
多くの人がフリーランスエンジニアを目指す時代に中途半端な知識や技術力でこの世界に飛び込むと返って過酷な労働条件で働くことになる。そこで、エンジニアを目指すあなたがどう学習していくべきかを私の経験を交えて書こうと思った。続きはこちらから、、、、
エンベーダー編集部
エンベーダーは、ITスクールRareTECHのインフラ学習教材として誕生しました。 「遊びながらインフラエンジニアへ」をコンセプトに、インフラへの学習ハードルを下げるツールとして運営されています。
関連記事
2020.02.25
完全未経験からエンジニアを目指す爆速勉強法
USBも知らなかった私が独学でプログラミングを勉強してGAFAに入社するまでの話
- キャリア・学習法
- エンジニア
2024.04.30
ウェブマーケティング用語「CTA」とは?効果的な使い方7つもご紹介
この記事では「WebマーケティングにおけるCTA」について解説しています。その他、CTAを設置する時に知っておきたい「CTAの効果的な使い方」や「CTAの注意点」も解説しているので、ぜひ参考にしてください。
- WEB
2023.01.25
人気WebサーバソフトApacheとは?
ApacheとはApache HTTP Serverの略称で、世界的に人気の高いオープンソースのWebサーバ(HTTPサーバ)ソフトウェアの1つです。
- WEB
2022.12.11
HTTPステータスコードとは何?確認方法は?
こちらの記事では、HTTPステータスコードについて解説します。
- WEB