CentOS 7へのnginxのインストール。最短でバーチャルホストまでを利用する。

2018/07/24 CentOS, Nginx

centos-nginx-inst-top
今までの記事でApacheに関する設定や機能の拡張について紹介してきましたが、ここ最近、導入されている環境が増えている、もう一つのウェブサーバーであるnginx(エンジンエックス)の導入について紹介します。
nginxはパフォーマンスに特化されたウェブサーバーで、Apacheのように機能がてんこ盛りというウェブサーバーとは異なり、最低限の機能を提供する代わりに高パフォーマンスが期待できるウェブサーバーです。大手のウェブサイトで導入実績も多く、着実にシェアを伸ばしているソフトウェアです。

スポンサーリンク

今回の記事では、nginxの基本的な導入手順と、一つのサーバー(とIPアドレス)で複数のサイトを運用するためのバーチャルホスト機能の提供までを紹介したいと思います。Apacheとnginx、どちらを導入するか、選択肢が増えることは悩ましいことですが、是非、両方試してみて、運用環境に合わせた選択を行って下さい。
※本記事ではパッケージによる導入を行っております。WordPressとFastCGIキャッシュを利用した場合に便利な”ngx_cache_purge”モジュールを利用する場合にはソースからのnginxインストールが必要になります。(ngx_cache_purgeモジュールが入っていない場合、キャッシュファイルを手動で削除します。)

(参考)本サイトのApache関連記事
>「Apacheインストール。最短でウェブサーバーを構築してテストページを表示する。」
>「ApacheのeventMPMとphp-fpmを利用してウェブサイトの速度を向上する。」
>「OPcacheとAPCuでWordPressの速度を5倍以上に向上させる。」

目次

1.nginxを導入する環境

nginxを導入する環境は、以前の記事で作成したCentOS7の環境になります。環境は「CentOS7の基本設定 Linuxのインストール後に設定する9つのポイント」で詳細に紹介していますが、基本的な前提条件は以下の通りになります。

  • OSのバージョンはCentOSで最新のバージョン7.5を利用しています。
  • CentOS 7系であれば、どのバージョンでも同じ手順で構築が可能です。
  • サーバーはインターネットへ接続されており、グローバルIPアドレスが一つ割り当てられています。
  • firewall-cmdを利用してファイアウォールを設定しています。
  • 設定するバーチャルホストとして”www.testdom.com”と”www.testdom2.com”がDNSで名前引きできます。

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

本環境では

が表示されます。この環境を前提に先へ進めて行きます。

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

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

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

成功するとsuccessと表示されます。設定の確認は以下のコマンドで行います。

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

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

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

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

OSデフォルトでは以下のようにnginxに関するパッケージを探してみても見つかりません。試しにyumコマンドでnginxのパッケージを確認してみます。

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

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

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

「nginx公式ウェブサイト」にOS毎のレポジトリファイルが記載されています。
(nginxレポジトリ作成用URL)https://nginx.org/en/linux_packages.html#mainline
基本的にはこのサイトに記載されている内容をコピーして、ファイルを作成します。Linuxのディストリビューションとバージョンに合わせて、URLの部分を変更します。本環境はOSとしてcentos、OSのバージョンは7になりますので、以下のようにレポジトリファイルの記載内容を変更します。
ウェブサイトの記載されているレポジトリファイルの内容

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

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

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

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

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

実行結果は以下のようになります。

nginxのパッケージが表示されたことが確認できました。この中で必要になるものは以下のパッケージになります。

  • nginx.x86_64 : High performance web server

上記のnginxパッケージをインストール対象とします。

3.nginxのインストール

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

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

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

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

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

nginxパッケージはyumコマンドにinstallオプションを付けることでインストールすることができます。項目3-1.で必要なパッケージの情報が確認できましたので、以下のコマンドでインストールします。

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

エラーの出力がなく”完了しました!”と表示されれば、ngixのインストールは完了です。

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

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

出力結果としてMariaDBパッケージが表示されることを確認します。

上記のようにnginxパッケージが表示されれば、確認は完了です。

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

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

4-1.nginxの起動

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

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

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

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

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

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

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

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

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

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

http://111.8.21.167

をブラウザへ入力すると、以下のようなテスト用のウェルカムページが表示されます。
centos-nginx-5-1
これでテスト用のウェルカムページが表示されることまで、確認が出来ました。続いてnginxの設定を行います。

6.nginx用ユーザーの作成

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

6-1.ユーザー作成

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

スポンサーリンク

7-3.テスト用HTMLファイルの作成

作成したディレクトリに、テスト用のHTMLファイルを作成します。二つのドメインに対して、作成します。
www.testdom.com テスト用HTMLファイル

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

9.nginxの設定

項目8.の手順までで、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の編集前に、既存のファイルをバックアップしておきます。具体的には以下の手順でコピーを行います。

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

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

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

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

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

14行目にあるhttpディレクティブに”server_tokesn off;”を追加します。以下のように変更します。

この部分を以下のように追加します。

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

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

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

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

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

この部分のコメントを外します。

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

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

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

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

デフォルトで設定されているkeepalive timeoutはやや長いため、変更します。65秒から3秒に変更しています。必要に応じて時間は調整してください。本記事では短めにしています。

の65を

3に変更します。

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

全ての項目を変更後のnginx.confファイルは以下のようになります。

変更点に間違いが無いかを確認します。問題なければ変更したnginx.confファイルを保存してください。

9-2.nginx.confの確認

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

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

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

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

10-1.default.confの移動

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

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

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

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

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

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

内容は以下のようになります。

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

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

上記の項目を運用する環境に合わせて変更します。必要に応じて変更後、ファイルを保存します。

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

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

ファイルの内容は以下のようになります。必要に応じて変更してください。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

11-4.設定の有効化

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

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

12.nginxの動作テスト

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

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

ブラウザからwww.testdom.comを表示します。以下のようにテスト用HTMLファイルの内容が表示されました。
centos-nginx-12-1-1
これで、バーチャルホスト”www.testdom.com”の確認は完了です。

12-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やパフォーマンスの向上を行うための設定などを記事にしていきたいと考えています。楽しみにして下さい。

関連する記事


システムでお困りのお客様

もし、貴社で、

  • サポート切れのサーバやネットワーク機器の入れ替えをしたいが、どうしたらよいかわからない
  • サーバやネットワークの管理を行う社員がいないため困っている
  • 業務に利用している機器のセキュリティが大丈夫か心配
  • 機器の障害で、業務への影響が発生している
  • 社内の要望に対して、どのようなシステムを導入したらよいか解らない

など、サーバーやネットワーク、セキュリティでお悩みの方、新規のシステム導入を検討中の方。
多くのシステム構築を行い、成功させてきた実績をもつ弊社が、その問題を解決します。
お気軽にお問い合わせ頂き、貴社の問題解決にお役立てください。

お問い合わせ・ご相談はこちらから

Facebookでのご購読が便利です。

Twitter・Feedlyでもご購読できます。

Twitterでフォローする Feedlyでフォローする

Message

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

  • スポンサーリンク