サブドメイン宛てのアクセスにおいて nginx をフロントにして Apache を裏側に置いたときにサブドメインごとに任意のディレクトリに振り分ける方法

結論

nginx を設定する部分と、Apache2 を設定する部分の二段階に分かれます。以下、abc.mydomain.jpxyz.mydomain.jpを以下のように振り分けることを目的とします。

  • abc.mydomain.jpにアクセスが来たらApache2で提供している/var/tmp/abc配下を見せる
  • xyz.mydomain.jpにアクセスが来たらApache2で提供している/var/tmp/xyz配下を見せる

また、nginxはポート80番、Apache2はポート12345番で受けているものとします。

1. nginx の設定

まずはnginxを設定します。/etc/nginx/sites-enabled/配下に設定ファイルを作ります。ファイル名は何でもよいので、ここではabc.confxyz.confとします。

abc.confはこんな感じになります。

server {
(省略)
  server_name abc.mydomain.jp

  location / {
    proxy_pass http://localhost:12345/;
(省略)
  }
}

xyz.confも作りますが、その内容は上記のabcの部分をxyzに変えるだけで OK です。

双方のファイルを作る際に注意する点は、Apache2側への振り分け先はApache2のサーバルートになるということです。「Apache2側で」server_nameを解釈してどこのローカルディレクトリを見せるかを決めるので、nginx側ではどこのローカルディレクトリを見せるのかということを考える必要がありません。

2. Apache2 の設定

次にApache2の設定をします。ここでは/etc/apache2/sites-available/000-default.confに一直線にベタ書きします*1/etc/apache2/sites-available/000-default.confを以下のように書きます。

(既存の部分は省略。既存の部分の末尾に以降を書き加える)

<VirtualHost *:12345>
(省略)
  ServerName abc.mydomain.jp
  DocumentRoot /var/tmp/abc
(省略)
</VirtualHost>

<VirtualHost *:12345>
(省略)
  ServerName xyz.mydomain.jp
  DocumentRoot /var/tmp/xyz
(省略)
</VirtualHost>

3. nginx と Apache2 を再起動する

ここまで設定ができたらnginxApache2を再起動しましょう。serviceコマンドは適宜読み替えを。

$ sudo service nginx restart
$ sudo service apache2 restart

4. abc.mydomain.jp と xyz.mydomain.jp にアクセスして確認する

再起動が終わったら正しくアクセスできるか確認します。特に相対パスでの動作が正しく行われているかを確認しましょう。

*1:設定ごとにファイルを分割した方がよいです

Powered by はてなブログ