K.Watanabeをフォローする

NGINXのドキュメントルートをいろいろ変更してみた

インフラ

PHPのWebサーバソフトウェアですが、長らく主流であったapacheが有名ですが、
近年ではNGINXが増えてきているようです。
わたくしの業務の中でapacheでローカル環境のサブドメイン化を行いまして、NGINXではどうすればいいのか気になりました。

基本的な書き方

まず、apacheでDocument Rootはどう書くかというとこんな感じです。 

DocumentRoot /var/www/html

これで/var/www/htmlにDocument Rootが設定されます。
この状態でsample内にコンテンツを置くとそれが表示されます。

それではこれをNGINXで書いてみるとどうなるでしょうか。

server {
    location / {
        root   /var/www/html;
    }
}

NGINXのDocument Rootであるlocationはserver内に書きます。
これで/var/www/html内のコンテンツを読み込めます。
今度は/var/www/html内にあるhogehogeディレクトリを読んでみましょう。

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

これでhogehogeへDocument Rootが変わりました。
ちなみに、locationはserverの中でいくつも設定できます。

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

location を使って”.php”を見ることもできます。

location ~ \.php$ {
        root           /var/www/html/;
}

上記では最後に”.php”の拡張子に一致させています。
私は、Dockerでphpコンテナとnginxコンテナを分離してやるときに使っています。

サブドメイン化

下記のディレクトリ構造を考えます。

apacheでサブドメイン化する場合にはこんな感じでやります。

<VirtualHost *:80>
  ServerName hogehoge.com
  ServerAlias *.hogehoge.com
  VirtualDocumentRoot "/var/www/html/%1"
</VirtualHost>
ServerAliasの "*"がワイルドカードとなります。
VirtualHostの中で"%1"と書くとURLに書いた"*"に相当する部分が置換されます。
"/var/www/html/fugafuga"にアクセスしたい場合は"fugafuga.hogehoge.com"と入力することでアクセスすることができます。

今度は、2つのワイルドカードを使用した”ServerAlias *.*.hogehoge.com”の場合を考えてみましょう。
この場合は左の’*’から%1、%2となります。
もし、”/var/www/html/fugafuga/piyopiyo”に”piyopiyo.fugafuga.hogehoge.com”アクセスする場合は以下のようにします。

<VirtualHost *:80>
    ServerName hogehoge.com
    ServerAlias *.*.hogehoge.com
    VirtualDocumentRoot "/var/www/html/%2/%1"
</VirtualHost>

次にNGINXではどう設定すればよいでしょうか。

server {
    server_name  ~^(.*)\..hogehoge.com;

    set $subdomain $1;

    location / {
        root   /var/www/html/$subdomain;
    }
}

“(.*)\.” がapacheでいう “*.” の部分に該当します。
“$1″がapacheでいう”%1″になり、$subdomainという変数に入れ、locationのrootに設定しています。
この設定で”fugafuga.hogehoge.com”にアクセスすると”/var/www/html/fugafuga”にアクセスできます。

同様に2つの場合は以下のようになります。

.hogehoge.comserver {
    server_name  ~^(.*)\.(.*)\.hogehoge.com;

    set $subdomain $1;
    set $subdomain2 $2;

    location / {
        root   /var/www/html/$subdomain2/$subdomain;
    }
}

この設定で”piyopiyo.fugafuga.hogehoge.com”にアクセスすれば、”/var/www/html/fugafuga/piyopiyo”へアクセスできます。
まだまだ未熟な身ではありますが、今回はNGINXのサブドメイン化について書いてみました。
初めてのブログ作成のため、拙い文章となりますが今後も学んだことを書いていきたいと思います(アウトプットは大事!)。