Nginxを使ってみよう

こんにちは。サイオステクノロジー OSS サポート担当何敏欽です。

Nginx は、Apache 代替となり得る Web サーバです。Apache では対応できない問題が起きてしまったことが、Nginx が作られたきっかけです。Nginx はリバースプロキシとしても機能するし、ロードバランサーとしても使用できます。

いまさらな感じもありますが、あまり Nginx を触ったことがない方のために、今回は入門として、Nginx 公式パッケージを利用して CentOS7.5/RHEL7.5 に nginx をインストール、ダウングレート、バージョン指定アップデートする方法、バーチャルホストを設定する方法や、設定項目について説明します。

Nginx のインストール、ダウングレート、バージョン指定アップデート

■Nginx のインストール

Nginx のサイトに従い Nginx のリポジトリを追加してインストールします。/etc/yum.repos.d/nginx.repo というファイルを作成し、そのファイルに以下の設定を追加します。

# cd /etc/yum.repos.d/
# vim nginx.repo
[nginx]
name=nginx repo
baseurl=https://nginx.org/packages/rhel/7/$basearch/
gpgcheck=0
enabled=1

yum コマンドでインストールします。これで、最新バージョンがイントールされます。

# yum install nginx
読み込んだプラグイン:langpacks, product-id, search-disabled-repos, subscription-manager
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
nginx                                                    | 2.9 kB     00:00
(中略)
================================================================================
 Package       アーキテクチャー
                              バージョン                    リポジトリー   容量
================================================================================
更新します:
 nginx         x86_64         1:1.15.2-1.el7_4.ngx          nginx         758 k

トランザクションの要約
================================================================================
(中略)
インストール:
  nginx.x86_64 1:1.15.2-1.el7_4.ngx

完了しました!

nginx のバージョンを確認します。

# nginx -v
nginx version: nginx/1.15.2

nginx の自動起動設定します。

# systemctl enable nginx.service

nginx を起動します。

# systemctl start nginx.service

■Nginx のダウングレート

システム要件で現在導入したバージョンより古いバージョンを使用したい時ってありますよね。以下の手順にて Ngnix をダウングレードすることが可能です。

以下のコマンドを実施し、ダウングレード対象のパッケージを確認します。

# yum --showduplicates list nginx
インストール済みパッケージ
nginx.x86_64                    1:1.15.2-1.el7_4.ngx                     @nginx
利用可能なパッケージ
nginx.x86_64                    1:1.9.0-1.el7.ngx                         nginx
nginx.x86_64                    1:1.9.1-1.el7.ngx                         nginx
(中略)
nginx.x86_64                    1:1.13.10-1.el7_4.ngx                     nginx
nginx.x86_64                    1:1.13.11-1.el7_4.ngx                     nginx
nginx.x86_64                    1:1.13.12-1.el7_4.ngx                     nginx
nginx.x86_64                    1:1.15.0-1.el7_4.ngx                      nginx
nginx.x86_64                    1:1.15.1-1.el7_4.ngx                      nginx
nginx.x86_64                    1:1.15.2-1.el7_4.ngx                      nginx

以下のコマンドを実行し、ダウングレードを行います。

# yum downgrade nginx-1.13.12
読み込んだプラグイン:langpacks, product-id, search-disabled-repos, subscription-manager
This system is not registered with an entitlement server. You can use subscription-manager to register.
(中略)
================================================================================
 Package       アーキテクチャー
                              バージョン                    リポジトリー   容量
================================================================================
ダウングレード中:
 nginx         x86_64         1:1.13.12-1.el7_4.ngx         nginx         750 k

トランザクションの要約
================================================================================
ダウングレード  1 パッケージ
(中略)
削除しました:
  nginx.x86_64 1:1.15.2-1.el7_4.ngx

インストール:
  nginx.x86_64 1:1.13.12-1.el7_4.ngx

完了しました!

■Nginx のバージョン指定アップデート

システム要件で最新バージョンではなく、特定のバージョンにアップデートしたい場合、下記のように yum update にアップデートしたいバージョンを指定すればいいです。

# yum update nginx-1.15.0
読み込んだプラグイン:langpacks, product-id, search-disabled-repos, subscription-manager
This system is not registered with an entitlement server. You can use subscription-manager to register.
(中略)
================================================================================
 Package       アーキテクチャー
                              バージョン                    リポジトリー   容量
================================================================================
更新します:
 nginx         x86_64         1:1.15.0-1.el7_4.ngx          nginx         755 k

トランザクションの要約
================================================================================
更新  1 パッケージ
(中略)
更新:
  nginx.x86_64 1:1.15.0-1.el7_4.ngx

完了しました!

バーチャルホストの設定

Nginx も Apache と同様にバーチャルホストを設定できます。バーチャルホストの設定は複数の方法がありますが、比較的簡単にできるものをご紹介したいと思います。

/etc/nginx/conf.d/default.conf を以下のように編集・追記します。元のファイル default.conf に変更を加える前に、設定ファイルの雛形をコピーすることをお勧めします。

server {
    listen       80;
    server_name  hoge1.com;

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

server {
    listen       80;
    server_name  hoge2.com;

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

server {
    listen       80;
    server_name  hoge3.com;

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

上記の設定を保存したら、下記のコマンドで構文エラーがないことを確認してから Nginx を再起動して設定を反映します。

# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

設定反映ができたら、次に index.html を作成します。

# cd /usr/share/nginx/html/
# mkdir hoge1 hoge2 hoge3
# vim hoge1/index.html
Virtual host hoge1's test page
# vim hoge2/index.html
Virtual host hoge2's test page
# vim hoge3/index.html
Virtual host hoge3's test page

hosts ファイルに以下の 3行を追加してドメインを解決させます。

10.1.0.X   hoge1.com
10.1.0.Y    hoge2.com
10.1.0.Z    hoge3.com

実際に Web ブラウザで https://hoge1.com にアクセスして表示を確認してみます。

hoge1

access.log に下記のメッセージが出力されます。

# tail -f /var/log/nginx/access.log
10.0.0.X- - [20/Aug/2018:14:51:56 +0900] "GET / HTTP/1.1" 200 31 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0" "-"

設定項目について

nginx.conf ファイルにおける主な設定項目では、user で実行ユーザを指定する 、パフォーマンスを調整するため Worker Process により実行プロセス数を指定する、worker_connections により 1つの worker プロセスが同時に処理できる最大接続数を設定する、error_log でエラーログを指定するなどがあります。いくつかのディレクティブの内容について、下記に説明します。

デフォルト値:1MB

最小値:1byte

最大値:特になし(0 の指定でボディサイズの制限チェック無効)

受信可能なリクエスト body の最大サイズを設定します。リクエストのサイズが設定値を超えますと、エラーメッセージ「413 Request Entity Too Large」がクライアントに返されます。

デフォルト値:off

内部的に sendfile() システムコールを用いるかどうかを指定します。on に設定するとパフォーマンス向上します。

デフォルトでは、Nginx がファイル送信自体を処理し、ファイルを送信する前にバッファにコピーします。sendfile ディレクティブを有効 (on) にしますと、データをバッファにコピーするステップが不要になり、効率良くファイルの内容をクライアントに送信できます。

デフォルト値:0

sendfile_max_chunk は、一つの sendfile() システムコールで転送できるデータ量を制限します。転送できるデータ量の制限がない場合、1つの高速な接続では、sendfile() は1つのシステムあたり数十メガバイトを送信し、ワーカープロセス全体を占有してしまう可能性があります。

デフォルト値:75s

HTTP の持続的な接続時間を設定します。0 に設定すると、KeepAlive 無効となります。Apache の KeepAliveTimeout に相当します。

デフォルト値:100

1つのキープアライブ接続で処理できる要求の最大数を設定します。最大数の要求が行われた後、接続は閉じられます。Apache のMaxKeepAliveRequests に相当します。

Nginx は、インストールや設定は極めてシンプルです。ぜひ一度、Nginx を使ってみてください。

ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

役に立った 役に立たなかった

1人がこの投稿は役に立ったと言っています。

コメントを残す

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