それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

nginxのサイト毎の設定が面倒なのでワイルドカードでディレクトリの有無で設定する

nginx のサイト毎の設定が面倒くさい。

サイトが追加されるたびに、ドメインとファイルを追加するのは面倒なので、ワイルドカードで設定したい。

Apacheだとワイルドカード的なことを割と面倒くさい感じで rewrite 組合せたり、virtualhost 設定をしたりだったけど、

nginx だと 正規表現と名前付き後方参照パターンマッチングで済む。

設定例

upstream php-fpm {
  server unix:/var/run/php/php-fpm.sock;
}


server {
        listen 81 ;

  server_name "~^(?<domain>.+)$";

        root /var/www/virtualhosts/$domain/www-data;

        # Add index.php to the list if you are using PHP
        index /_h5ai/public/index.php ;

        server_name $domain;

        location / {
    autoindex on;
                try_files $uri $uri/ =404;
        }

  location ~ \.(php)$ {
    include fastcgi_params;
    fastcgi_index index.php;
    fastcgi_param   SCRIPT_FILENAME         $document_root$fastcgi_script_name;
    fastcgi_pass php-fpm;
  }
}

設定のポイント

これで、正規表現のパターンマッチングをして、 domain という名前で後方参照出来るようにする。

  server_name "~^(?<domain>.+)$";

これで、domain にマッチさせる。

        root /var/www/virtualhosts/$domain/www-data;

応用編

サイトのサブドメイン毎に設定したいときも同じ

  server_name "~^(?<subdomain>.+).example.com$";

こうすれば、サブドメインごとのマッチングも簡単に。

   root /var/www/example.com/$subdomain/www-data;

設定するメリット

ドメインディレクトリを作ればサブドメインドメイン毎のサイト公開ができるようになる。

この手順だと誰でも設定できるようになるので、あとはwordpressの中身をコピペすれば動くようになる。

docker で wordpressを作らなくても良くなるのは便利だよ。

参考資料

http://nginx.org/en/docs/http/server_names.html

関連資料

ワイルドカードでApacheのVirtualHost-はてなブログでやってるあれ - それマグで!