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ではそう簡単にはいかないようです。別に設定(というか別のパッケージのインストール)が必要です。こちらについては次回書いてみようと思います。

スポンサーリンク

コメントを残す

メールアドレスが公開されることはありません。