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