Apacheのドキュメントルートをnginxの公開ディレクトリにしてみた。

WEBサーバーをApacheからnginxに変えてみました。試した環境はubuntu18.04で、Apache(ver2.4.29)からnginx(1.16.1)への変更です。なお前回nginxをインストールしたのですが、それはこちらです。Apacheにはバーチャルホストが設定されていて以下となっています。nginx.confはインストール時の初期設定のままです。

<VirtualHost *:80>
  ServerName www.example.com
  DocumentRoot /var/www/html/example
  :
</VirtualHost>
<VirtualHost *:80>
  ServerName www.hogehoge.com
  DocumentRoot /var/www/html/hogehoge
  :
</VirtualHost>

まずバーチャルサーバーの設定をします(Apacheではバーチャルホストと呼んでいる)。修正するファイルは /etc/nginx/conf.d 配下になります。conf.d配下にはインストール時にdefault.confがもともと作成されていますが、これとは別に「〜.conf」ファイルを新規作成します。拡張子が「.conf」になっていれば名前は何でもいいです。ここではvhost.confとでもしておきます。rootユーザーで作業してください。

バーチャルサーバーの設定をするconfファイルの新規作成
# cd /etc/nginx/conf.d
# touch vhost.conf

conf.d配下のファイルはnginx.confからincludeされています。nginx.confの中に include /etc/nginx/conf.d/*.conf; という記載があります。

新しく作成したファイル(ここではvhost.conf)に記載する内容は以下です。

server {
  listen 80;
  server_name www.example.com;

  location / {
    root /var/www/html/example;
  }
  :
  :
}
server {
  listen 80;
  server_name www.hogehoge.com;

  location / {
    root /var/www/html/hogehoge;
  }
  :
  :
}

viで編集します。

バーチャルサーバーの設定
# vi vhost.conf

僕が実際に書いたファイルの内容です(default.confのものをコピペしてコメントアウトされていたところを消しただけです)。

Apacheではホスト名をServerNameで指定するのですが、nginxではserver_nameで指定します。またApacheのドキュメントルートはDocumentRootで指定しますが、nginxではrootで指定します。

[広告]

次にnginxを実行するユーザを「www-data」に変更します。ubuntuではApacheの実行ユーザーはwww-dataであるためファイルの読み書きの権限の問題が出ないようにnginxの実行ユーザーをwww-dataにします。修正するファイルは以下です。

修正ファイル
/etc/nginx/nginx.conf

nginx.confに「user」があるので、そこを変更します。

変更前
user nginx;
 ↓
変更後
user www-data;

なお、先ほど作成したvhost.confの設定の中でサーバーエラー(500系のエラー)のときに /usr/share/nginx/html 配下のファイルを参照するようになっていますが、この配下のファイルは参照権限が付与されていますのでwww-dataに実行ユーザーを変更しても問題はありません。

以上で修正は完了です。コンフィグのテストをします。

コンフィグのテスト
# nginx -t

エラーがなければ「syntax is ok」および「test is successful」のメッセージが出ます。nginxを再起動します。

nginxの再起動
# systemctl restart nginx

ブラウザでWEBサーバーにアクセスします。HTMLファイルが表示されると思います。ただここでは静的なHTMLファイルを表示させるだけです。動的なHTMLファイルは表示できません。上記で修正した内容は、Apacheのドキュメントルートとバーチャルホストの内容をnginxに反映させただけです。ApacheではPHPやCGIを動かすのに専用のモジュールをロードしておけば簡単に使えたのですが、nginxではそう簡単にはいかないようです。別に設定(というか別のパッケージのインストール)が必要です。こちらについては次回書いてみようと思います。

ubuntu18.04にnginxをインストールしてみた。

みなさんがすでにやっていることですが、僕もubuntuにnginxをインストールしてみました。手順がネット上にたくさん公開されているのでそれを参考にして特に問題なくできました。ソースからコンパイルする方法ではなく、パッケージをインストールする方法です。一応、書いておきます。作業はすべてrootユーザーで行いました。

nginxのパッケージをインストールするにあたり、そのパッケージが改ざんされていないか確認する手順(正当性の確認の手順)があるので、先にPGP鍵をインストールしておきます。

PGP鍵の取得
# wget https://nginx.org/keys/nginx_signing.key

PGP鍵のインストール
# apt-key add nginx_signing.key

問題なくインストールできれば「OK」と表示されます。PGP鍵がインストールできたか確認してみます。

PGP鍵の確認
# apt-key list

いくつか鍵が表示されるのですが「/etc/apt/trusted.gpg」のところに以下のようなnginxの鍵が表示されていれば大丈夫です(「不明」って言葉があるのだけど、あまり意味がわかってはない)。有効期限も設定されているのですね。。

次に、パッケージの取得元をリポジトリに登録します。/etc/apt 配下にある sources.list ファイルを編集します。一応、sources.listはバックアップを取っておきましょう。

sources.listファイルのバックアップ
# cd /etc/apt
# cp -p sources.list sources.list.bkup

sources.listファイルには以下の2行を末尾に追加します。

# vi sources.list
===== 末尾に追加する行 =====
deb http://nginx.org/packages/ubuntu/ bionic nginx
deb-src http://nginx.org/packages/ubuntu/ bionic nginx
=========================

ubuntu/ と bionic の間は半角スペースを入れます。またbionicはubuntu18.04のコードネームで、ubuntuの他のバージョンの場合はここを変える必要があります。ubuntuのコードネームは以下のようなので自分の環境に応じて書き換えてください。

16.04 xenial
16.10 yakkety
17.04 zesty
17.10 artful
18.04 bionic
18.10 cosmic
19.04 disco
19.10 eoan
20.04 focal

sources.listを編集して保存したら、リポジトリを更新して最新化します。

リポジトリのアップデート
# apt update

ここでインストールされるnginxのバージョンを確認してみます。

インストールされるパッケージの確認
# apt show nginx

2019年12月29日現在では1.16.1のバージョンがインストールされるみたいです。ちなみに「N: 追加レコードが 6 件あります。表示するには ‘-a’ スイッチを付けてください。」とメッセージが出ているので以下のコマンドを打ってみました。すると、他のバージョンもあるよ、みたいなものが表示されました。

インストールされるパッケージの確認(詳細)
# apt -a show nginx

※表示される内容は省略します。。

では、nginxをインストールしてみようと思います。準備はもう整っているので以下のコマンドを打つだけです。

nginxのインストール
# apt install nginx

インストール処理が進むごとにメッセージが表示されます。ログを取得しているのでここに貼り付けても良ったのですが、省略しました。インストールが終わったらバージョンを確認してみます。

nginxのバージョンの確認
# nginx -v

「nginx version: nginx/1.16.1」と表示されました。インストールはこれで完了です。nginxをインストールした直後だとnginxが立ち上がっていないので起動させます。

nginxの起動
# systemctl start nginx

nginxの起動の確認
# systemctl is-active nginx

「active」と表示されれば起動できています。
ちなみにですが、インストール直後はnginxは起動していないのですが自動起動は「enabled」になっています。OSがを再起動したときなどnginxが自動起動するかどうかは以下で確認できます。

nginxの自動起動の確認
# systemctl list-unit-files | grep nginx

自動起動させるかどうかは以下で設定してください。

nginxを自動起動する
# systemctl enable nginx

nginxを自動起動させない
# systemctl disable nginx

nginxにアクセスして画面が表示されるか確認してみます。ブラウザを立ち上げて以下のURLを打ち込みます。

http://localhost/

nginxが問題なく動いていれば「Welcome to nginx!」の画面が表示されます。

最後に、nginxの公式サイトのダウンロードのURLを載せておきます。

ダウンロードのURL
https://nginx.org/en/download.html

2019年12月29日現在では以下です。

ここを見ると「Mainline version」と「Stable version」というのがあるのですが、上記の方法でパッケージをインストールするとStable versionがインストールされるみたいです。Mainline versionとStable versionの違いですが、nginxの新機能やバグ修正はまずMainline versionに反映されて、後にStable versionに反映されるようです。Mainline versionは新機能がどんどん追加されていくためAPIの互換性がたまに崩れることがあるとのこと。Stable versionは原則深刻なバグや脆弱性の修正に限っていてAPIの互換性は保たれるらしい(Stable versionはAPIの互換性を重視している)。こう書くとStable versionのほうが良さそうに思えるのだけれども、Mainline versionのほうが推奨されているようです。個人的にはStable versionで良いかな、と思っています。