CentOS Nginx

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

2018年6月21日

centos-nginx-inst-top2

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

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

スポンサーリンク

目次

1. nginxを導入する環境

nginxは以前の記事で作成したCentOS 7の環境に導入する前提です。CentOS 7の詳細な設定と環境は

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

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

で紹介していますが、基本的な前提条件は以下の通りになります。

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

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

$ cat /etc/redhat-release

本環境では

CentOS Linux release 7.5.1804 (Core)

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

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

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

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

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

# firewall-cmd --reload
success

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

# 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という最新のバグフィックスや機能が盛り込まれたバージョンの二つが用意されています。nginxではmainline版を利用することを推奨しているようですので、本記事ではmainline版を利用します。

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

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

$ 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/”ディレクトリにあります。現状のレポジトリファイルを確認してみます。

$ 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用レポジトリファイルの作成

にOS毎のレポジトリファイルが記載されています。

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

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

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

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

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

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

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

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

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

$ 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.x86_64 : High performance web server

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

スポンサーリンク

3. nginxのインストール

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

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

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

$ 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. で必要なパッケージの情報が確認できましたので、以下のコマンドでインストールします。

# yum -y install nginx

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

読み込んだプラグイン: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

完了しました!

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

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

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

$ yum list installed | grep nginx

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

nginx.x86_64 1:1.15.0-1.el7_4.ngx @nginx

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

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

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

4-1. nginxの起動

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

# systemctl start nginx

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

# 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が起動していることを確認できます。
以下のように実行します。

$ 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コマンドを実行します。

# 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オプションを付与して実行します。

$ systemctl is-enabled nginx
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"を指定します。成るべくシステムへログインできるユーザーを制限することがセキュリティの基本です。

# useradd -s /sbin/nologin www

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

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

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

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

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

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

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

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

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

$ 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コマンドで作成します。

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

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

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

# vi /home/www/www.testdom.com/index.html

www.testdom.com test page

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

# vi /home/www/www.testdom2.com/index.html

www.testdom2.com test page

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

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

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

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

# chown -R www:www /home/www

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

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

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

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

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

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

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

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

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

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

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

$ 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 ディレクトリが表示されれば確認は完了です。
作業後のディレクトリツリーは以下のようになります。

/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

[/st-cmemo]

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

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

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

[root@www2 nginx]# vi nginx.conf

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

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

user nginx;

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

user www;

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

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

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

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

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

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

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

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

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

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

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

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

#gzip on;

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

gzip on;

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

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

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

server_names_hash_bucket_size 128;

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

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

keepalive_timeout 65;

の65を

keepalive_timeout 3;

3に変更します。

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

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

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 -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/”以下に入っています。以下の手順でファイルをコピーします。

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

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

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

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

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”という命名規則で作成します。

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

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

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コマンドを以下のように実行します。

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

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

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ディレクトリは以下のようになります。

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

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

/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

[/st-cmemo]

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

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

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

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

# 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コマンドで行います。

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

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

/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-enalbedディレクトリに設定されているシンボリックリンクを削除します。
削除はunlinkコマンドを利用します。例えばwww.testdom2.com.confを無効化したい場合は以下のようにunlinkコマンドを実行します。

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

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

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

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

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

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

# 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を再起動します。

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

エンジニアへのご相談

システムの新規導入や入れ替えに

記事をお読みいただいてシステムの新規導入や入れ替えを相談したい、また記事中のインストールや設定がうまくいかない場合のお問い合わせはフォームからご連絡下さい。レムシステムではオープンソースを含むシステムを導入した実績が豊富にあります。課題解決から導入、サポートまでレムシステムにお任せ下さい。

お問い合わせをいただいた先への営業活動などは行なっておりませんので、疑問点や不安な部分については、お気軽にお問い合わせください。

エンジニアへのご相談

  • この記事を書いた人
  • 最新記事

小村定

SIerでIT系インフラの設計と構築を経験したのちに独立、「レムシステム株式会社」を設立する。インフラ系エンジニア歴20年の経験を活かしてITに関わる課題解決や効率化に取り組む日々を送っている。

Copyright© レムシステム エンジニアブログ , 2019 All Rights Reserved.