こんにちは。サイオステクノロジー 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 にアクセスして表示を確認してみます。
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 を使ってみてください。