CentOS 7へNginxをインストールして最短でサイトが表示できる手順

centos-yum-nginx-install-top

今までApacheに関する設定や機能の拡張について紹介してきましたが、ここ最近導入されている環境が増えている、もう一つのウェブサーバーNginx(エンジンエックス)をご存知でしょうか。

Nginxはパフォーマンスに特化されたオープンソースのウェブサーバーで、Apacheのように高機能なウェブサーバーとは異なり、最低限の機能を提供する代わりに高パフォーマンスが期待できるウェブサーバーです。大手のウェブサイトで導入実績も多く、着実にシェアを伸ばしているウェブサーバーです。

今回の記事ではNginxの基本的な導入手順と、一台のサーバー(とIPアドレス)での複数のサイトを運用するためのバーチャルホスト機能の設定までを紹介したいと思います。ApacheとNginx、どちらを導入するか選択肢が増えることは悩ましいことですが、是非、両方試してみて、運用環境に合わせた選択を行って下さい。

注意ポイント

本記事ではRPMパッケージでのNginxインストール手順を紹介しています。WordPressFastCGIキャッシュを利用した場合にキャッシュ削除に便利な「ngx_cache_purge」モジュールを利用する場合にはソースからのNginxインストールが必要になります。ngx_cache_purgeモジュールが入っていない場合には、キャッシュファイルを手動で削除します。

1. Nginxを導入する環境

Nginxは以前の記事で作成したCentOS 7の環境に導入する前提です。CentOS 7の詳細な設定と環境は以下の記事で紹介しています。

参考 CentOS 7をインストールする手順を紹介した記事

CentOS
CentOS 7のインストール後におこなうLinuxの基本設定 13ポイント

CentOS 7(バージョン7.0~7.6)のインストール完了後に、設定する最低限のポイントを13点纏めてみました。(2019年6月に追加)本記事で紹介した手順は一例で、これ以外にもサーバーを構築するためには複数の手順が必要になります。まず ...

今回、Nginxのセットアップを行うCentOS 7の環境とサイト名は以下の通りになります。

CentOS 7.6の環境とサイト名

  • OSのバージョンはCentOSで最新のバージョン7.6を利用
  • CentOS 7系であれば、どのバージョンでも同じ手順で構築が可能
  • サーバーにはグローバルIPアドレスが一つ割り当てられている
  • firewall-cmdを利用してファイアウォールを設定済み
  • 設定するサイト名「www.testdom.com」と「www.testdom2.com」が名前引きできる

参考 CentOSの場合、バージョン確認は以下のコマンドで実施できます。

CentOSの基本

$ cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)

このCentOS環境を利用する前提でnginxの導入を先へ進めて行きます。

本記事では一般ユーザーでの実行が可能なコマンドについてはプロンプトとして"$"、rootユーザーでの実行が必要なコマンドについては"#"を記載しています。

1-1. firewall-cmdコマンドによる80番ポートのオープン

CentOS 7のfirewalldを利用している場合は、以下のように設定を行います。
firewall-cmdコマンドでウェブサーバーの待ち受けポートである80番に外部から接続できるように設定を追加します。コマンドは以下のように実行します。

 command
# firewall-cmd --add-service=http --permanent
success

このコマンドはデフォルトのゾーンであるpublicにhttpのサービスを追加します。publicゾーンはインターフェイスに対して割り当てられていますので、この場合はどのIPアドレスからもhttpへ接続可能になります。
続いて、設定を反映するために再読み込みを実行します。

 command
# firewall-cmd --reload
success

成功すると「success」と表示されます。firewalldの設定確認は以下のように行います。

 command
# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: ens33
sources:
services: dhcpv6-client http
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:

表示された結果の「services」項目に「http」が追加されていれば、確認は完了です。

2. nginxインストール前の事前準備

nginxのインストール前に事前準備を行います。作業としてはNginxをインストールするのに必要なレポジトリの追加になります。なおnginxのサイトには「stable」という安定版と「mainline」という最新のバグフィックスや機能が盛り込まれたバージョンの2つが用意されています。nginxではmainline版を利用することを推奨してますので、本記事では「mainline」版を利用します。

2-1. Nginx用レポジトリの設定

CentOSの初期状態ではNginxに関するパッケージを探してみても見つかりません。試しに"yum"コマンドでNginxのパッケージを確認してみます。

 command
$ yum search nginx
読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
* base: ftp.tsukuba.wide.ad.jp
* extras: ftp.tsukuba.wide.ad.jp
* updates: ftp.tsukuba.wide.ad.jp
========================= N/S matched: nginx =================
pcp-pmda-nginx.x86_64 : Performance Co-Pilot (PCP) metrics for the Nginx Webserver
Name and summary matches only, use "search all" for everything.

上記のようにnginxは含まれていません。これはOSのベースに用意されているレポジトリにはNginxは含まれていなことが原因です。nginxをインストールするためにはNginx用レポジトリの追加が必要になります。
レポジトリファイルは「/etc/yum.repos.d/」ディレクトリにあります。現状のレポジトリファイルを確認してみます。

 command
$ ls -s /etc/yum.repos.d/
CentOS-Base.repo CentOS-Debuginfo.repo CentOS-Sources.repo CentOS-fasttrack.repo
CentOS-CR.repo CentOS-Media.repo CentOS-Vault.repo

上記のレポジトリファイルが存在します。ここにnginx用のレポジトリファイルを追加します。

2-1-1. Nginx用レポジトリファイルの作成

Nginx用のレポジトリファイルは「nginx公式ウェブサイト」に内容が記載されています。

「nginx公式ウェブサイト」>「nginxレポジトリ作成用ページ」にOS毎のレポジトリファイルが記載されています。

このサイトに記載されている内容をコピーして、レポジトリ用ファイルを作成します。利用しているLinuxのディストリビューションとバージョンに合わせて、URLの部分を変更します。本環境はOSとして「centos」OSのバージョンは「7」になりますので、以下のようにレポジトリファイルの内容を変更します。
ウェブサイトの記載されているレポジトリファイルの内容

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

変更後のレポジトリファイルの内容

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

本記事ではenabled=1としてレポジトリを常に有効にしています。
ファイルの内容が確認できたら、viコマンドでレポジトリ登録用の「nginx.repo」ファイルを作成します。以下のようにviコマンドを実行します。

 command
# vi /etc/yum.repos.d/nginx.repo

開いたエディタに、先ほどの内容をコピー&ペーストします。完了後にはファイルを保存して下さい。これでnginx用レポジトリファイルの追加は完了です。

2-1-2. Nginx用レポジトリ追加の確認

レポジトリファイルを追加した後で、Nginxのパッケージが表示されることを確認してみます。レポジトリはenable=1で有効になっていますので、レポジトリの指定なしで"yum"コマンドを実行します。

 command
$ yum search nginx
読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
* base: ftp.tsukuba.wide.ad.jp
* extras: ftp.tsukuba.wide.ad.jp
* updates: ftp.tsukuba.wide.ad.jp
===================== N/S matched: nginx =========================
nginx-debug.x86_64 : debug version of nginx
nginx-debuginfo.x86_64 : Debug information for package nginx
nginx-module-geoip.x86_64 : nginx GeoIP dynamic modules
nginx-module-geoip-debuginfo.x86_64 : Debug information for package nginx-module-geoip
nginx-module-image-filter.x86_64 : nginx image filter dynamic module
nginx-module-image-filter-debuginfo.x86_64 : Debug information for package nginx-module-image-filter
nginx-module-njs.x86_64 : nginx nginScript dynamic modules
nginx-module-njs-debuginfo.x86_64 : Debug information for package nginx-module-njs
nginx-module-perl.x86_64 : nginx Perl dynamic module
nginx-module-perl-debuginfo.x86_64 : Debug information for package nginx-module-perl
nginx-module-xslt.x86_64 : nginx xslt dynamic module
nginx-module-xslt-debuginfo.x86_64 : Debug information for package nginx-module-xslt
nginx-nr-agent.noarch : New Relic agent for NGINX and NGINX Plus
pcp-pmda-nginx.x86_64 : Performance Co-Pilot (PCP) metrics for the Nginx Webserver
nginx.x86_64 : High performance web server
unit.x86_64 : NGINX Unit
unit-devel.x86_64 : NGINX Unit (development tools)
Name and summary matches only, use "search all" for everything.

今度はNginxのパッケージが表示されたことが確認できました。表示された中でNginxのインストールに必要になるパッケージは以下になります。

  • nginx.x86_64 : High performance web server

このパッケージをインストールします。

3. Nginxのインストール

本章では実際にnginxパッケージをインストールする手順を紹介していきます。特に難しい部分はありませんので、ゆっくりと落ち着いて作業して頂ければ大丈夫です。

3-1. Nginxパッケージの情報を確認

Nginxパッケージのインストール前に、パッケージの情報を確認しておきます。実行結果は以下の通りです。各パッケージの役割などを確認しておくと、インストールするパッケージの意味合いをイメージしやすいと思います。

 command
$ yum info nginx
読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
* base: ftp.tsukuba.wide.ad.jp
* extras: ftp.tsukuba.wide.ad.jp
* updates: ftp.tsukuba.wide.ad.jp
利用可能なパッケージ
名前 : nginx
アーキテクチャー : x86_64
エポック : 1
バージョン : 1.15.0
リリース : 1.el7_4.ngx
容量 : 755 k
リポジトリー : nginx/x86_64
要約 : High performance web server
URL : http://nginx.org/
ライセンス : 2-clause BSD-like license
説明 : nginx [engine x] is an HTTP and reverse proxy server, as well as
: a mail proxy server.

パッケージの詳細を確認後、インストールに入ります。

3-2. Nginxパッケージのインストール

Nginxパッケージは"yum install"コマンドでインストールすることができます。項目3-1. で必要なパッケージの情報が確認できましたので、以下のようにコマンドを実行してパッケージをインストールします。

 command
# yum -y install nginx

上記ではyumコマンドに-yオプションを付けることでインストール時の確認応答を省いています。コマンドを実行すると、以下のようにインストールが開始されます。

 command
読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
* base: ftp.tsukuba.wide.ad.jp
* extras: ftp.tsukuba.wide.ad.jp
* updates: ftp.tsukuba.wide.ad.jp
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ nginx.x86_64 1:1.15.0-1.el7_4.ngx を インストール
--> 依存性解決を終了しました。
依存性を解決しました
インストール中:
nginx x86_64 1:1.15.0-1.el7_4.ngx nginx 755 k
トランザクションの要約
インストール 1 パッケージ
総ダウンロード容量: 755 k
インストール容量: 2.6 M
Downloading packages:
nginx-1.15.0-1.el7_4.ngx.x86_64.rpm | 755 kB 00:00:15
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
インストール中 : 1:nginx-1.15.0-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.15.0-1.el7_4.ngx.x86_64 1/1
インストール:
nginx.x86_64 1:1.15.0-1.el7_4.ngx
完了しました!

エラーの出力がなく「完了しました!」と表示されれば、Nginxパッケージのインストールは完了です。

3-3. インストールされたNginxパッケージの確認

Nginxパッケージがインストールされたことを確認します。インストールされているパッケージは"yum list"コマンドで確認できます。以下のようにコマンドを実行して、インストール済みのNginxパッケージが表示されることを確認します。

 command
$ yum list installed | grep nginx
nginx.x86_64 1:1.15.0-1.el7_4.ngx @nginx

上記のようにNginxパッケージが表示されれば、インストール後の確認は完了です。

4. Nginx起動の確認と自動起動設定

ここまででNginxのインストールと確認が完了しましたので、本章ではインストールしたNginxの起動と自動起動設定を行います。

4-1. Nginxの起動

CentOSでは7系から"systemctl"コマンドでサービスの起動・停止を行います。nginxは以下のように実行することで起動できます。

 command
# systemctl start nginx

エラーが出力されなければNginxは起動しています。合わせてサービスのステータス確認を行います。
systemctlコマンドにstatusオプションを付けて実行することで、起動したサービスの状態について、詳細な情報を取得することができます。以下が実行例です。

 command
# 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-06-18 18:37:48 JST; 17s ago
Docs: http://nginx.org/en/docs/
Process: 1796 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS)
Main PID: 1797 (nginx)
CGroup: /system.slice/nginx.service
tq1797 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
mq1798 nginx: worker process
6月 18 18:37:48 www2 systemd[1]: Starting nginx - high performance web server...
6月 18 18:37:48 www2 systemd[1]: PID file /var/run/nginx.pid not readable (yet?) after start.
6月 18 18:37:48 www2 systemd[1]: Started nginx - high performance web server.

上記では分かり難いかもしれませんが、丸(●)の部分が正常な起動状態の場合には緑色で表示されます。また稼働しているプロセスを表示するpsコマンドでもNginxが起動していることを確認できます。
以下のようにコマンドを実行します。

 command
$ ps -aux | grep ngix
root 1797 0.0 0.0 46404 964 ? Ss 18:37 0:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
nginx 1798 0.0 0.1 46804 1928 ? S 18:37 0:00 nginx: worker process

以上の結果からNginxが正常に起動することが確認できました。

4-2. nginxの自動起動設定

サーバーの再起動や停止の復旧時に、Nginxが自動的に起動するように設定します。サービスの自動起動を設定するにもsystemctlコマンドを利用します。自動起動は以下のようにsystemctlコマンドを実行します。

 command
# systemctl enable nginx
Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to /usr/lib/systemd/system/nginx.service.

エラーが出力されなければ、自動起動の設定は正常に完了しています。
続いて自動起動が設定されたことを確認します。こちらもsystemctlコマンドから確認できます。is-enabledオプションを付与して実行します。

 command
$ systemctl is-enabled nginx
enabled

「enabled」と表示されればサービスの自動起動は設定されています。これで自動起動の確認は完了です。

5. ウェルカムページの表示確認

ここまでの手順でNginxパッケージに用意されたデフォルトで用意されているウェブページを表示することが出来ます。ご自分の環境で利用されているウェブブラウザから、テスト用のページが表示できることを確認します。NginxをインストールしたサーバーのIPアドレスが111.8.21.167の場合には、以下のようにブラウザへ入力します。

http://111.8.21.167

Nginxが正常に動作している場合には、テスト用のウェルカムページが表示されます。

centos-nginx-5-1

これでテスト用のウェルカムページが表示されることまで確認が出来ました。続いてnginxの設定を行います。

6. Nginx用ユーザーの作成

まずNginxを動作させるためにユーザーを追加します。
デフォルトではNginxのインストール時に同名のユーザ「nginx」が作成されますが、これは利用せずに新規で「www」というユーザーを追加します。nginxユーザーについてはコンテンツアップロード時の権限と、ユーザー名が分かってしまう可能性を考慮して、本記事では利用しません。
※本記事ではwwwユーザーを作成していますが、ユーザー名は任意になりますのでwww以外でも問題ありません。

6-1. ユーザー作成

ユーザー追加は"useradd"コマンドで行います。"-s"オプションを付けることでユーザーのシェルを指定しています。
wwwユーザーはサーバーへログインすることがないので、シェルとして「/sbin/nologin」を指定します。なるべくシステムへログインできるユーザーを制限することがセキュリティの基本です。

 command
# useradd -s /sbin/nologin www

エラーが出力されなければ、ユーザーの作成は完了です。

6-2. パスワードの設定

続いて、作成したユーザーにパスワードの設定を行います。

 command
# passwd www
ユーザー www のパスワードを変更。
新しいパスワード: (パスワードを入力)
新しいパスワードを再入力してください: (パスワードを再入力)
passwd: すべての認証トークンが正しく更新できました。

パスワードは任意のものを設定します。なるべく予測されにくい複雑なものを設定することをおすすめします。エラーの出力が無ければパスワードの設定は完了です。

6-3. 作成したユーザーの確認

作成したウェブサーバー用のユーザー"www"についての情報を確認します。「/etc/passwd」ファイルに作成したwwwユーザーの情報が追加されていることを確認します。確認は以下のコマンドで行います。

 command
$ cat /etc/passwd | grep www
www:x:1006:1006::/home/www:/sbin/nologin

続いて"id"コマンドでユーザーとグループが表示されることを確認します。

 command
$ id www
uid=1006(www) gid=1006(www) groups=1006(www)

wwwユーザーに関する情報が表示されればユーザーの確認は完了です。

7. コンテンツ配置用ディレクトリの作成

今回のnginx構成はバーチャルホストを利用することを前提としています。アクセス先URLに応じてディレクトリを分けて、各ディレクトリにコンテンツを配置する形になります。その為、コンテンツを配置するためのディレクトリ「ドキュメントルート」を事前に作成しておきます。
※本作業はバーチャルホストを追加する毎に必要になります。

7-1. コンテンツを配置用ディレクトリの場所

コンテンツはFTPを利用してアップロードを行うことを考えて、「/home/www/」以下にバーチャルホストのFQDNに合わせたディレクトリを作成し、その中に配置します。今回の構成ではドメイン名として「www.testdom.com」と「www.testdom2.com」を設定します。

7-2. ディレクトリの作成

ディレクトリの作成を行います。ディレクトリは"mkdir"コマンドで作成します。

 command
# mkdir /home/www/www.testdom.com /home/www/www.testdom2.com

7-3. テスト用HTMLファイルの作成
作成したドキュメントルートにテスト用のHTMLファイルを作成します。両方のドキュメントルートに対して作成します。
www.testdom.com テスト用HTMLファイル

 command
# vi /home/www/www.testdom.com/index.html
www.testdom.com test page

作成後、HTMLファイルを保存します。これでwww.testdom.com用ファイルの作成は完了です。
続いて、www.testdom2.comテスト用のHTMLファイルを作成します。
www.testdom2.com テスト用HTMLファイル

 command
# vi /home/www/www.testdom2.com/index.html
www.testdom2.com test page

作成後、ファイルを保存します。これでwww.testdom2.com用ファイルの作成は完了です。
本作業後のディレクトリツリーは以下のようになります。

 directory
/home/
`-- www
|-- www.testdom.com
| |-- index.html
`-- www.testdom2.com
|-- index.html

7-4. パーミッションの変更

作成されたディレクトリはコマンドを実行したユーザーである「root」がオーナーになっています。これをNginxウェブサーバー用のユーザーである「www」に変更します。以下のようにchownコマンド実行します。chownコマンドの"-R"オプションはディレクトリに含まれる全てのファイルとディレクトリの権限を一括で変更します。

 command
# chown -R www:www /home/www

これでパーミッションの変更は完了です。

8. バーチャルホスト管理用ディレクトリの作成

今回の構成ではNginxで複数のバーチャルホストを運用する形を想定しています。複数のバーチャルホストを運用するには、一つのconfファイルに列記していくことも可能ですが、数が多くなってくると管理が大変になります。ここでは管理を簡単にするために、ディレクトリを作成します。

8-1. 管理用ディレクトリの構成

バーチャルホストを管理するためのディレクトリとして以下の二つを作成します。

バーチャルホスト用設定ファイルの保存先 sites-available
有効にするバーチャルホストのリンク設定先 sites-enabled

「sites-available」ディレクトリには全てのバーチャルホスト用設定ファイルを保存します。「sites-enabled」ディレクトリには有効にするバーチャルホストの設定ファイルに対して「シンボリックリンク」を設定していきます。
sites-enabledのシンボリックリンクが設定されているバーチャルホストが有効になるイメージです。

8-2. 管理用ディレクトリの作成

"mkdir"コマンドで管理用ディレクトリを作成します。

 command
# mkdir /etc/nginx/sites-available /etc/nginx/sites-enabled

作成後に確認します。lsコマンドでディレクトリのファイルを表示します。

 command
$ ls -a /etc/nginx
ls -a /etc/nginx
. conf.d koi-utf mime.types nginx.conf scgi_params sites-enabled win-utf
.. fastcgi_params koi-win modules nginx.conf.org sites-available uwsgi_params

作成したsites-available と sites-enabled ディレクトリが表示されれば確認は完了です。
作業後のディレクトリツリーは以下のようになります。

 directory
/etc/nginx/
|-- conf.d
|-- fastcgi_params
|-- koi-utf
|-- koi-win
|-- mime.types
|-- modules -> ../../usr/lib64/nginx/modules
|-- nginx.conf
|-- scgi_params
|-- sites-available
|-- sites-enabled
|-- uwsgi_params
`-- win-utf

作成後にディレクトリを確認しておくことをオススメします。

9. nginxの設定

ここまでの手順でNginxを利用するための基本的な準備が完了しました。本章ではNginxを利用するにあたって必要な設定変更を説明していきます。設定の前提は以下のようになります。

nginx設定の前提条件

  • 動作ユーザーとグループは「www」に変更
  • バーチャルホストを設定、各ドキュメントルートは「/home/www/」以下に作成
  • バーチャルホスト用の設定ファイルを読み込むよう「sites-enabled」ディレクトリをincludeする
  • セキュリティ対策としてnginxのバージョンを非表示
  • データを圧縮して配信するためにgzip機能を有効
  • 日本語ドメインなどで見られる長いバーチャルホスト名に対応する

この条件に合わせて設定を行っていきます。

9-1. nginx.confファイルの変更

nginxの設定はnginx自体の設定を行うための「nginx.conf」ファイルと、サイト毎の設定を行うための「default.conf」に分かれています。ファイルは「/etc/nginx/」以下に保存されています。まずはnginx.confの変更を行います。
nginx.confの編集前に、既存のファイルをバックアップしておきます。以下の手順でファイルのコピーを行います。

 command
# cd /etc/nginx/
# cp -p nginx.conf nginx.conf.org

バックアップの完了後、エディタで設定ファイルを開いて変更を行います。本環境ではOSの標準的なエディタである「viエディタ」を利用しています。

 command
[root@www2 nginx]# vi nginx.conf

9-1-1. 動作ユーザーの変更

2行目にあるuserの設定を変更します。動作ユーザーの設定になります。

 code
user nginx;

このパラメータを、以下のように変更します。

 code
user www;

9-1-2. バージョンの非表示

14行目にあるhttpディレクティブにバージョンを非表示にするためのパラメータ「server_tokesn off;」を追加します。以下のように変更します。

 code
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;

httpディレクティブを以下のように変更します。

 code
http {
server_tokens off;
include /etc/nginx/mime.types;
default_type application/octet-stream;

9-1-3. バーチャルホスト用設定ファイルのinclude

有効になるバーチャルホスト用の設定ファイルを「include」するためにhttpディレクティブに設定を追加します。
31行目にある以下の部分に追記を行います。

 code
include /etc/nginx/conf.d/*.conf;
}

この部分を以下のように変更します。

 code
include /etc/nginx/conf.d/*.conf;
include sites-enabled/*.conf;
}

9-1-4. gzip圧縮の有効化

コンテンツを配信する際にgzipを利用して圧縮を行い、サイズを小さくする機能を有効化します。多少ですがサイトの表示が早くなります。以下を変更します。

 code
#gzip on;

このパラメータのコメントを外します。

 code
gzip on;

上記のように変更します。

9-1-5. 長いバーチャルホスト名への対応

日本語ドメインなどで見られる長いバーチャルホスト名を設定すると、エラーになることがあります。その回避として以下の設定を行います。
gzipの記述の下辺りに以下の設定を追加します。128の部分はハッシュ化されたバーチャルホスト名のサイズになります。やや大きめを指定しています。

 code
server_names_hash_bucket_size 128;

9-1-6. キープアライブのタイムアウト秒数を変更

デフォルトで設定されているキープアライブのタイムアウト値「keepalive timeout」はやや長いため変更します。65秒から3秒に変更しています。環境に応じて時間は調整してください。本記事では短めにしています。

 code
keepalive_timeout 65;

の「65」を「3」に変更します。

 code
keepalive_timeout 3;

9-1-7. 設定変更後のnginx.conf

全てのパラメータを変更後のnginx.confファイルは以下のようになります。

 code
user www;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
server_tokens off;
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 3;
gzip on;
server_names_hash_bucket_size 128;
include /etc/nginx/conf.d/*.conf;
include sites-enabled/*.conf;
}

変更したパラメータに間違いがないことを確認します。問題なければ変更したnginx.confファイルを保存してください。

9-2. nginx.confの確認

nginx.confの変更が終わったら、確認用のコマンドで設定ファイルに間違いや問題がないかを確認します。nginxに"-t"オプションを付けて実行することで設定ファイルの間違いをチェックできます。nginxの設定変更後には実行することをお勧めします。
以下のように実行します。

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

「test is successful」と表示されればファイルには問題ありません。

10. バーチャルホスト用の設定ファイル作成

nginx自体の設定は完了しましたので、続いて、バーチャルホスト用の設定ファイルを作成します。
設定ファイルとしてdefault.confが用意されていますが、これとは別にドメイン毎の設定ファイルを作成していきます。default.confはどのバーチャルホスト名にもマッチしない場合に表示されるホストになります。

10-1. default.confの移動

最初から用意されているdefault.confをバーチャルホスト用ディレクトリである「sites-available」へ移動します。default.confは「/etc/nginx/conf.d/」以下に入っています。以下の手順でファイルをコピーします。

 command
# mv /etc/nginx/conf.d/default.conf /etc/nginx/sites-available/

default.confファイルが移動できたことを確認します。

 command
# ls -a /etc/nginx/sites-available/
. .. default.conf

上記のようにdefault.confが表示されれば移動は完了です。
ちなみにdefault.confは以下のような内容になります。

 code
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}

上記のようにserverディレクティブでバーチャルホストの基本設定を行っています。これをベースにバーチャルホスト用の設定ファイルを作成していきます。

10-2. バーチャルホストwww.testdom.com用の設定ファイル作成

一つ目のバーチャルホスト「www.testdom.com」用の設定ファイルを作成します。作成先は「sites-available」ディレクトリになりますので、viコマンドを以下のように実行します。尚、ファイル名は「ドメイン名」+拡張子「conf」という命名規則で作成します。

 command
# vi /etc/nginx/sites-available/www.testdom.conf

作成するファイルの内容は以下になります。

 command
server {
listen 80;
server_name testdom.com www.testdom.com;
access_log /var/log/nginx/www.testdom.com-access.log main;
error_log /var/log/nginx/www.testdom.com-error.log;
root /home/www/www.testdom.com;
location / {
index index.html index.htm;
}
}

ファイルの中で変更が必要になる部分は以下の項目です。

server_name バーチャルホスト名を指定します。本設定のようにドメイン名とFQDNと両方を記載することで、wwwあり、無しの両方でアクセスができます
access_log アクセスログの出力先を指定します。ドメイン事に区別すると分かりやすくなります
error_log エラーログの出力先を指定します。ドメイン事に区別すると分かりやすくなります
root バーチャルホストのドキュメントルートを指定します

上記のパラメータを運用する環境に合わせて変更します。変更後にファイルを保存します。

10-3. バーチャルホスト「www.testdom2.com」用の設定ファイル作成

項目10-2. と同じように設定ファイルを作成します。作成する手順は基本的には同じです。viコマンドを以下のように実行します。

 command
# vi /etc/nginx/sites-available/www.testdom2.com.conf

ファイルの内容は以下になります。環境や運用に応じて変更してください。

 command
server {
listen 80;
server_name testdom2.com www.testdom2.com;
access_log /var/log/nginx/www.testdom2.com-access.log main;
error_log /var/log/nginx/www.testdom2.com-error.log;
root /home/www/www.testdom2.com;
location / {
index index.html index.htm;
}
}

変更した内容を確認して、問題なければファイルを保存します。
ファイルの作成後「sites-avilable」ディレクトリは以下のようになります。

 command
# ls -a /etc/nginx/sites-available/
. .. default.conf www.testdom.com.conf www.testdom2.com.conf

これでバーチャルホスト用設定ファイルの作成は完了です。作業後のディレクトリツリーは以下のようになります。

 directory
/etc/nginx/
|-- conf.d
|-- fastcgi_params
|-- koi-utf
|-- koi-win
|-- mime.types
|-- modules -> ../../usr/lib64/nginx/modules
|-- nginx.conf
|-- scgi_params
|-- sites-available
| |-- default.conf
| |-- www.testdom.com.conf
| |-- www.testdom2.com.conf
|-- sites-enabled
|-- uwsgi_params
`-- win-utf

11. バーチャルホストの管理

バーチャルホストを有効化するためには「sites-avilable」ディレクトリに作成したバーチャルホスト用の設定ファイルに対して、「sites-enabled」ディレクトリにシンボリックリンクを作成する必要があります。本章ではバーチャルホストの有効化と無効化を説明します。

11-1. バーチャルホストの有効化

シンボリックリンクは"ln"コマンドで作成します。ここでは作成した全てのバーチャルホストを有効にします。以下のようにlnコマンドを実行します。

 command
# ln -s /etc/nginx/sites-available/default.conf /etc/nginx/sites-enabled/default.com.conf
# ln -s /etc/nginx/sites-available/www.testdom.com.conf /etc/nginx/sites-enabled/www.testdom.com.conf
# ln -s /etc/nginx/sites-available/www.testdom2.com.conf /etc/nginx/sites-enabled/www.testdom2.com.conf

エラーが出力されなければ、シンボリックリンクは正常に作成されています。確認はlsコマンドで行います。

 command
# ls -a /etc/nginx/sites-enabled/
. .. default.conf www.testdom.com.conf www.testdom2.com.conf

上記のようにsites-enabledディレクトリにシンボリックリンクが表示されていれば、確認は完了です。
尚、本作業後のフォルダとファイルの構成は以下のようになります。

 directory
/etc/nginx/
|-- conf.d
|-- fastcgi_params
|-- koi-utf
|-- koi-win
|-- mime.types
|-- modules -> ../../usr/lib64/nginx/modules
|-- nginx.conf
|-- scgi_params
|-- sites-available
| |-- default.conf
| |-- www.testdom.com.conf
| |-- www.testdom2.com.conf
|-- sites-enabled
| |-- default.conf -> /etc/nginx/sites-available/default.conf
| |-- www.testdom.com.conf -> /etc/nginx/sites-available/www.testdom.com.conf
| `-- www.testdom2.com.conf -> /etc/nginx/sites-available/www.testdom2.com.con
|-- uwsgi_params
`-- win-utf

11-2. バーチャルホストの無効化

有効化したバーチャルホストを無効化する場合には「sites-enabled」ディレクトリに設定されているシンボリックリンクを削除します。
削除は"unlink"コマンドを利用します。例えばwww.testdom2.com.confを無効化したい場合は以下のようにunlinkコマンドを実行します。

 command
# unlink /etc/nginx/sites-enabled/www.testdom.com.conf

エラーが出力されなければ、シンボリックリンクは正常に削除されています。確認は"ls"コマンドで行います。

 command
# ls -a /etc/nginx/sites-enabled/
. .. default.conf www.testdom.com.conf

上記のようにsites-enabledディレクトリからシンボリックリンクが削除されていれば、確認は完了です。

11-3. 設定ファイルの確認

設定ファイルの作成と配置が完了したら、間違いや問題がないかを確認します。nginxに"-t"オプションを付けて実行することで設定ファイルの間違いをチェックできます。設定変更後には実行することをお勧めします。以下のように実行します。

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

上記のように「test is successful」と表示されればファイルには問題ありません。

11-4. 設定の有効化

シンボリックリンクでの管理について、有効化と無効化の何れかを行った場合には設定ファイルの再読み込みとして、nginxの再起動が必要になります。"systemctl"コマンドでnginxを再起動します。

 command
# systemctl restart nginx

エラーが出力されなければ、nginxの再起動は完了しています。これで設定の有効化は完了です。

12. nginxの動作テスト

ここまででnginxのバーチャルホスト設定が完了しましたので動作テストを行います。コマンドでの確認もできますが、ブラウザからのほうが早いと思いますので、ブラウザを利用して確認を行います。
バーチャルホストの動作確認には、DNSによる名前引き(正引き:ドメイン名からIPが引ける)が設定されている必要があります。もしDNSの名前引きが利用できない場合は、利用しているコンピューターのhostsファイルに、直接、IPとホスト名を記載することでも対応できます。

11-1. www.testdom.comの確認

ブラウザからwww.testdom.comを表示します。以下のようにテスト用HTMLファイルの内容が表示されました。

centos-nginx-12-1-1

これで、バーチャルホスト「www.testdom.com」の確認は完了です。

11-2. www.testdom2.comの確認

ブラウザからwww.testdom2.comを表示します。以下のようにテスト用HTMLファイルの内容が表示されました。

centos-nginx-12-2-1

これでバーチャルホスト「www.testdom2.com」の確認は完了です。

両方のサイトが表示されたことで、バーチャルホストが正常に動作していることが確認できました。これでNginxと各バーチャルホストの確認が完了です。

13. まとめ

Nginxは設計思想からApacheとは大きくことなります。Nginxはパフォーマンスに特化したウェブサーバーになりますので、設定ファイルや構成については分かりにくい部分があるかと思います。本手順では基本的な設定についてのみ記載していますが、様々なカスタイマイズで容易にパフォーマンスを向上できるNginxはここからが面白いところです。是非、基本的な構成を理解して、Apacheとは違うNginxならではの良さを楽しんで頂ければ幸いです。
今後はこの構成を元にPHPのインストールやパフォーマンスの向上を行うための設定などを紹介した記事を参考にしていただくことをおすすめします。

  • この記事を書いた人
rem-profile-photo

レムシステム

レムシステムはPC・サーバー・ネットワークでの業務効率化を主な業務としている会社です。全国に対応しています。

-CentOS, Nginx