nginxでWebサーバを構築してみよう

2017年6月23日

やってみよう、入門記事です。

本記事の内容

本記事の内容は以下の通りです。

nginxとは

nginxはOSS(Open Source Software)のWebサーバです。
高速処理や並列処理、小メモリでの実行などの特徴があります。
静的コンテンツの配信やリクエストの振り分けが得意とされています。

以下のような機能があります。

  • HTTPサーバ
  • メール(SMTP、POP3、IMAP)やTCP/UDPなどに対するリバースプロキシ
  • ロードバランサ
  • HTTPキャッシュ

公式サイト
http://nginx.org/

設定などについて詳しくは以下のサイトを参照ください。
https://www.nginx.com/resources/wiki/start/index.html

Webサーバのリクエスト処理アーキテクチャ

Webサーバにおいて、クライアントからの接続要求に対する処理アーキテクチャとしては大きく次の3種類があります。
nginxはイベント駆動モデルを採用しています。

マルチプロセスモデル

1つのリクエストに対して1つのプロセスを立ち上げます。

マルチスレッドモデル

1つのリクエストに対して1つのスレッドを立ち上げます。

イベント駆動モデル

1つのプロセスによって複数のリクエストを処理します。

Apache HTTP Serverがリクエスト処理においてデフォルトでプロセス指向(prefork MPM)のアプローチを用いている(2.4系からはevent MPMがデフォルト)一方で、nginxは非同期のイベント駆動アプローチを用いています。
そのため、nginxは小メモリ、コンテキストスイッチのオーバーヘッドが少ない、プロセス・スレッドの同時実行数の問題がないといった特徴を持ち、C10K問題を解決できるWebサーバとしても注目されています。

Windowsでの環境構築

ダウンロード

以下のダウンロードページからダウンロードします。
http://nginx.org/en/download.html

「nginx/Windows-x.x.x」をダウンロードします。

インストール

ダウンロードしたファイルを展開し、任意の場所に配置します。

Webサーバの起動と起動確認

展開したディレクトリ直下のnginx.exeをダブルクリックで実行します。
またはコマンドプロンプトからインストールディレクトリに移動して「nginx」を実行します。
※ファイアウォールの設定を求められる場合には適宜許可設定します

ブラウザで以下のURLにアクセスします。
http://localhost

「Welcome to nginx!」が表示されれば成功です。

【Webページが表示されない場合】

タスクの確認

タスクマネージャを起動します。
「nginx.exe」の起動を確認します。

LISTENINGの確認

コマンドプロンプトから「netstat -ano | findstr 0.0.0.0:80」を実行します。
デフォルトの80番ポートでLISTENINGで待ち受けしているか確認します。
プロセス番号も合わせて確認します。

他のWebサーバとの競合

ApacheやIISなどの他のWebサーバとポート番号がバッティングしていないか確認します。

※\logs\nginx.pidファイルに起動プロセス番号が記録されています
※\conf\nginx.confファイルで待ち受けポート番号を変更できます

macOSでの環境構築

インストール

Homebrewを使用したインストールについて説明します。
Homebrewのインストールには事前にCommand Line Tools for Xcodeが必要になります。

Homebrewのインストール

HomebrewはmacOS向けのパッケージ管理ツールです。
以下のコマンドでインストールできます。

$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

インストール後、環境に問題がないか以下のコマンドで確認しておきます。

$ brew doctor
Your system is ready to brew.

Homebrewについて、詳しくは以下の公式サイトを参照ください。
https://brew.sh/index_ja.html

【Xcodeをインストールしていない場合】

XcodeをAppStoreからダウンロードしてインストールします。
Xcodeを起動してライセンス使用許諾契約に同意しておきます。
以下のコマンドでCommand Line Toolsがインストールされます。

$ xcode-select --install
xcode-select: note: install requested for command line developer tools

nginxのインストール

ターミナルから以下のコマンドを実行します。
Homebrewを使用すると/usr/localにインストールされます。

$ brew install nginx

インストールを確認します。

$ nginx -v
nginx version: nginx/x.x.x

Webサーバの起動と起動確認

ターミナルから「nginx」コマンドで起動後、ブラウザから以下のURLにアクセスします。
$ sudo nginx
http://localhost:8080

「Welcome to nginx!」が表示されれば成功です。
※デフォルトのポート番号は8080です

RHEL/CentOSでの環境構築

yumを使ったビルド版のインストールについて説明します。

ダウンロード&インストール

プレビルドされたパッケージについて以下に説明があります。
http://nginx.org/en/linux_packages.html

以下のファイルを作成、リポジトリ登録を行います。
/etc/yum.repos.d/nginx.repo

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

“OS”にOSの種類を指定します。”rhel”または”centos”に置き換えます。
“OSRELEASE”にバージョンを指定します。”6″や”7″に置き換えます。

CentOSのバージョン7の場合は下記になります。

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

上記内容のファイルを作成後、yumを使ってリポジトリからインストールします。

$ sudo yum install nginx

yumからのインストール時に「Public key for nginx-xxx.rpm is not installed」というエラーが表示される場合は、以下で公開鍵の登録を行ってください。

$ sudo rpm --import http://nginx.org/keys/nginx_signing.key

インストールを確認します。

$ nginx -v
nginx version: nginx/x.x.x

Webサーバの起動と起動確認

コンソールから「nginx」コマンドで起動後、ブラウザから以下のURLにアクセスします。
$ sudo nginx
http://localhost

「Welcome to nginx!」が表示されれば成功です。

【CentOS7でWebページが表示されない場合】

Firewalldの設定でHTTP通信がデフォルトでは許可されていません。
以下にてHTTP通信を許可することができます。

「/etc/firewalld/zones/public.xml」に設定されています。
サービスにhttpを追加します。

<?xml version="1.0" encoding="utf-8"?>
<zone>
    <short>Public</short>
    <description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description>
    <service name="dhcpv6-client"/>
    <service name="ssh"/>
    <service name="http"/>
</zone>

Firewalldを再起動します。

$ sudo systemctl restart firewalld

nginxの主要コマンド

コマンド実行について

Windows : コマンドプロンプトから(インストールディレクトリに移動して)実行します。
macOS : ターミナルから実行します。
RHEL/CentOS : コンソールから実行します。
(#のコマンドは管理者権限が必要です)

起動

# nginx
※Windowsの場合、別のコマンドプロンプトウィンドウで実行する場合は「start nginx」

通常停止

# nginx -s quit

高速停止

# nginx -s stop

再起動

# nginx -s reload

設定ファイルのチェック

# nginx -t

バージョンの確認

$ nginx -v

バージョンと詳細設定の確認

$ nginx -V

ヘルプの表示

$ nginx -h

nginxの主要ファイル

主なファイルおよびディレクトリは以下になります(デフォルト)。
※Windowsの場合はインストールディレクトリからの相対パスとして記載しています

nginx.conf

HTTPなどアクセス関連の設定ファイルです。

Windows

\conf\nginx.conf

macOS

/usr/local/etc/nginx/nginx.conf

RHEL/CentOS

/etc/nginx/nginx.conf

mime.types

MIME Typeの設定ファイルです。

Windows

\conf\mime.types

macOS

/usr/local/etc/nginx/mime.types

RHEL/CentOS

/etc/nginx/mime.types

types {
    text/html html htm shtml;
    text/css css;
    ・・・
}

設定ファイル管理ディレクトリ

サーバ関連の設定ファイルが格納されたディレクトリです。

Windows

なし

macOS

なし

RHEL/CentOS

/etc/nginx/conf.d/

default.conf

デフォルトの設定ファイルです。

Windows

※「\conf\nginx.conf」に記載

macOS

※「/usr/local/etc/nginx/nginx.conf」に記載

RHEL/CentOS

/etc/nginx/conf.d/default.conf

server {
    listen 8 0;
    server_name localhost;
    ・・・
    location / {
        root /usr/share/nginx/html;
        ・・・
}

待ち受けポート番号を変更したい場合はlistenの値を変更します。
ドキュメントルートを変更したい場合はrootの値を変更します。

ドキュメントルートディレクトリ

Webコンテンツの格納ディレクトリです。

Windows

\html\

macOS

/usr/local/var/www/

RHEL/CentOS

/usr/share/nginx/html/

nginx.pid

nginxのプロセスIDが書き込まれるファイルです。

Windows

\logs\nginx.pid

macOS

/usr/local/var/run/nginx.pid

RHEL/CentOS

/var/run/nginx.pid

access.log

アクセスログファイルです。

Windows

\logs\access.log

macOS

/usr/local/var/log/nginx/access.log

RHEL/CentOS

/var/log/nginx/access.log

error.log

エラーログファイルです。

Windows

\logs\error.log

macOS

/usr/local/var/log/nginx/error.log

RHEL/CentOS

/var/log/nginx/error.log

参考サイト

<公式サイト>
nginx
https://nginx.org/

<Wikipedia>
nginx
https://ja.wikipedia.org/wiki/Nginx

以上です。おつかれさまでした。

この記事を書いた人

泰松 猛雄

関連記事

おすすめの記事