NginxでWebサーバを構築

7にNginxでWebサーバを構築する

internet site
CentOSで特に何も考えずにWebサーバを構築しようと思うとApacheを使っている(私だけ?)と思います。Apache以外にもWEBサーバソフトウェアは公開されているのですが、標準リポジトリでインストール出来たり、情報が多数存在していることなどから、Apacheを使用しているというパターンがないでしょうか?
Apacheが悪いということではありませんので誤解されないようお願い致します。

Nginxとは

Nginxはエンジンエックスと読むようです。NginxはApacheのC10K問題、1万同時接続問題と呼ばれる同時に大量のリクエストに対応する際にネットワーク通信やファイルの読み書きの待ちによって、リクエストを処理しきれなくなる現象に対応するために作られたと言われています。

このような問題に対応するため、NginxはノンブロッキングI/Oを採用しています。基本的にシングルスレッドのイベントループがサーバーのリクエスト、リスポンスのようなイベントを管理し、ワーカー(worker)と呼ばれるシングルスレッドのプロセスを複数利用することで、大量の同時接続を裁くことができるようになります。
これにより、Nginxは、性能の高くないサーバーでも10万以上の同時接続を裁くことを可能にしています。

動画配信サービスなどの高トラフィックが発生する環境で用いられていますが、Nginx自体は少ないリソースでも動作することから、小規模な環境でも有効と言えます。

説明が上手くできていないのでwikipediaに書かれている内容は下記です。

nginx(「エンジンエックス」のように発音[3])は、フリーかつオープンソースなWebサーバである。処理性能・高い並行性・メモリ使用量の小ささに焦点を当てて開発されており、HTTP, HTTPS, SMTP, POP3, IMAPのリバースプロキシの機能や、ロードバランサ、HTTPキャッシュの機能も持つ。

nginxは、BSDライクライセンスでリリースされており、、BSD系OS、macOS、Solaris、AIX、HP-UX、Microsoft Windowsで動作する。2002年にIgor Sysoevによって公開された。現在はNGINX Plusとしてnginxのエンタープライズ版の販売やサポートを行っているNginx, Inc.が管理している。

nginxは静的コンテンツ(つまりサーバ上のファイル)を高速に配信するように設計されている。また、リバースプロキシの機能を持つため、背後にWebアプリケーションサーバを配置して動的なコンテンツを配信したり、ソフトウェアロードバランサ[4]やHTTPキャッシュとしても使うこともできる。各種のウェブアプリケーション用インターフェース(FastCGI, uWSGI, Phusion Passengerなど)も標準でサポートしている。

Apache HTTP Serverがリクエストの処理にデフォルトでスレッドやプロセス指向のアプローチを用いている一方で、nginxは非同期のイベント駆動アプローチを用いている。イベント駆動によるアプローチは、高負荷下において、より予測可能なパフォーマンスを提供すると考えられている[5]。

出典:Wikipedia nginx

上記に記述されているようにNginxは静的なコンテンツを高速で配信することを目的としているため、一部のスクリプト(PHPなど)はそのままでは動作させることができません。組み込む方法はありますが、この記事では触れません。

Nginxをインストール

Nginxは標準のリポジトリには含まれていません。リポジトリを作成、またはインストールすることでyumコマンドでインストールできます。

リポジトリの追加

[root@centos7-104 ~]# wget http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
--2018-02-13 14:44:11--  http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

長さ: 4680 (4.6K) [application/x-redhat-package-manager]
`nginx-release-centos-7-0.el7.ngx.noarch.rpm' に保存中

100%[==========================================================>] 4,680       --.-K/s 時間 0s

2018-02-13 14:44:11 (308 MB/s) - `nginx-release-centos-7-0.el7.ngx.noarch.rpm' へ保存完了 [4680/4680]

[root@centos7-104 ~]# ls
anaconda-ks.cfg  nginx-release-centos-7-0.el7.ngx.noarch.rpm
[root@centos7-104 ~]# rpm -ivh nginx-release-centos-7-0.el7.ngx.noarch.rpm
警告: nginx-release-centos-7-0.el7.ngx.noarch.rpm: ヘッダー V4 RSA/SHA1 Signature、鍵 ID 7bd9bf62: NOKEY
準備しています...              ################################# [100%]
更新中 / インストール中...
   1:nginx-release-centos-7-0.el7.ngx ################################# [100%]
[root@centos7-104 ~]# yum repolist
読み込んだプラグイン:fastestmirror
nginx                                                                        | 2.9 kB  00:00:00
nginx/x86_64/primary_db                                                      |  31 kB  00:00:00
Loading mirror speeds from cached hostfile
 * base: ftp.iij.ad.jp
 * extras: centos.usonyx.net
 * updates: centos.usonyx.net
リポジトリー ID                               リポジトリー名                                   状態
base/7/x86_64                                 CentOS-7 - Base                                  9,591
extras/7/x86_64                               CentOS-7 - Extras                                  388
nginx/x86_64                                  nginx repo                                          90
updates/7/x86_64                              CentOS-7 - Updates                               1,929
repolist: 11,998

もし手動で作成するならば

リポジトリファイルを手動で作成するならば、次のような内容を記述します。

# nginx.repo

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

Nginxのインストール

[root@centos7-104 ~]# yum install nginx
読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
 * base: ftp.iij.ad.jp
 * extras: centos.usonyx.net
 * updates: centos.usonyx.net
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ nginx.x86_64 1:1.12.2-1.el7_4.ngx を 
--> 依存性解決を終了しました。

依存性を解決しました

====================================================================================================
 Package            アーキテクチャー    バージョン                         リポジトリー        容量
====================================================================================================
インストール中:
 nginx              x86_64              1:1.12.2-1.el7_4.ngx               nginx              716 k

トランザクションの要約
====================================================================================================
  1 パッケージ

総ダウンロード容量: 716 k
インストール容量: 2.5 M
Is this ok [y/d/N]: y
Downloading packages:
nginx-1.12.2-1.el7_4.ngx.x86_64.rpm                                          | 716 kB  00:00:07
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  インストール中          : 1:nginx-1.12.2-1.el7_4.ngx.x86_64                                   1/1
----------------------------------------------------------------------

Thanks for using nginx!

Please find the official documentation for nginx here:
* http://nginx.org/en/docs/

Please subscribe to nginx-announce mailing list to get
the most important news about nginx:
* http://nginx.org/en/support.html

Commercial subscriptions for nginx are available on:
* http://nginx.com/products/

----------------------------------------------------------------------
  検証中                  : 1:nginx-1.12.2-1.el7_4.ngx.x86_64                                   1/1

:
  nginx.x86_64 1:1.12.2-1.el7_4.ngx

完了しました!

バージョン確認

[root@centos7-104 ~]# nginx -v
nginx version: nginx/1.12.2

動作を確認

Nginxを開始してアクセスを確認します。

[root@centos7-104 ~]# 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/
[root@centos7-104 ~]# systemctl start nginx
[root@centos7-104 ~]# 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 火 2018-02-13 16:02:15 JST; 2s ago
     Docs: http://nginx.org/en/docs/
  Process: 12446 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS)
  Process: 12444 ExecStartPre=/usr/sbin/nginx -t -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS)
 Main PID: 12448 (nginx)
   CGroup: /system.slice/nginx.service
           tq12448 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
           mq12449 nginx: worker process

起動設定の変更

OSが起動した際にNginxも開始するように設定を変更します。

[root@centos7-104 ~]# systemctl enable nginx
Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to /usr/lib/systemd/system/nginx.service.
[root@centos7-104 ~]# systemctl status nginx
● nginx.service - nginx - high performance web server
   Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled)
   Active: active (running) since 火 2018-02-13 16:02:15 JST; 1h 3min ago
     Docs: http://nginx.org/en/docs/
 Main PID: 12448 (nginx)
   CGroup: /system.slice/nginx.service
           tq12448 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
           mq12449 nginx: worker process

firewallの設定

CentOS7ではfirewalldがデフォルトで開始しています。設定を追加するか、firewalldを停止しないとWebブラウザからのアクセスがエラーになるでしょう。
「正常に接続できませんでした」のようなエラーメッセージが表示されるハズです。

firewallを停止してWebブラウザからのアクセスを確認

一旦、firewallを停止してWebブラウザからのアクセスを確認しましょう。

[root@centos7-104 ~]# systemctl stop firewalld
[root@centos7-104 ~]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
   Active: inactive (dead) since 火 2018-02-13 16:03:59 JST; 3s ago
     Docs: man:firewalld(1)
 Main PID: 526 (code=exited, status=0/SUCCESS)

 2月 13 13:05:59 centos7-104.vsample.com systemd[1]: Starting firewalld - dynamic firewall dae.....
 2月 13 13:06:00 centos7-104.vsample.com systemd[1]: Started firewalld - dynamic firewall daemon.
 2月 13 13:06:00 centos7-104.vsample.com firewalld[526]: WARNING: ICMP type 'beyond-scope' is ...6.
 2月 13 13:06:00 centos7-104.vsample.com firewalld[526]: WARNING: beyond-scope: INVALID_ICMPTY...e.
 2月 13 13:06:00 centos7-104.vsample.com firewalld[526]: WARNING: ICMP type 'failed-policy' is...6.
 2月 13 13:06:00 centos7-104.vsample.com firewalld[526]: WARNING: failed-policy: INVALID_ICMPT...e.
 2月 13 13:06:00 centos7-104.vsample.com firewalld[526]: WARNING: ICMP type 'reject-route' is ...6.
 2月 13 13:06:00 centos7-104.vsample.com firewalld[526]: WARNING: reject-route: INVALID_ICMPTY...e.
 2月 13 16:03:58 centos7-104.vsample.com systemd[1]: Stopping firewalld - dynamic firewall dae.....
 2月 13 16:03:59 centos7-104.vsample.com systemd[1]: Stopped firewalld - dynamic firewall daemon.
Hint: Some lines were ellipsized, use -l to show in full.

firewallの設定確認

先ほどfirewallを停止した場合は、firewallを開始します。

[root@centos7-104 ~]# systemctl start firewalld

firewallの設定確認

[root@centos7-104 ~]# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: enp0s3 enp0s8 enp0s9
  sources:
  services: dhcpv6-client ssh
  ports:
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

servicesの項目にhttpが存在していませんので追加します。ここではhttpとhttpsを追加します。
–permanentを付けないと恒久的な設定追加にならないので注意が必要です。

[root@centos7-104 ~]# firewall-cmd --add-service=http --zone=public --permanent
success
[root@centos7-104 ~]# firewall-cmd --add-service=https --zone=public --permanent
success
[root@centos7-104 ~]# firewall-cmd --reload
success
[root@centos7-104 ~]# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: enp0s3 enp0s8 enp0s9
  sources:
  services: dhcpv6-client ssh http https
  ports:
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

再度、Webブラウザからアクセス確認します。
次のような画面が表示すればOK!

Nginxにhtmlファイルを置く

htmlファイルを置くPathは次のディレクトリです。

/usr/share/nginx/html/

このディレクトリ以下にhtmlファイルを配置してWebサイトを構築します。

Nginxの設定ファイルなどが配置されているディレクトリ

/etc/nginx/
スポンサーリンク
spdsk-side
spdsk-side