Synology NAS : Multi Domain ~ 1つのNASの上に複数ドメイン名でサイトを構築する [2025/07/02追記]

はじめに

WordPressは,PHP + MySQL (mariaDB)ベースの動的なCMSです.DSMに内蔵されたWeb Station (ApacheまたはNginx) + PHPがそれぞれ処理します.


*CMS : content management system

今回,一つのNASの上に2つ(以上)のサイトを構築する手順を解説します.

以前にAI君にその方法を問うてみると「できる」と断言されました.その詳細な方法について色々と聞いてみると「それらしい答え」を出してきました.

これまでは,ネット検索では思いついた時に,その都度調査していましたが,求めているサイト/方法/手順は見つけられませんでした.あきられて新しいIP Addressを取得(費用が必要)することも真剣に考えていところです.

しかし,1カ月前,AI君は「できる」と断言しました.その後,1カ月くらい放置して自分の頭の中で熟成させていたこの案件ですが,この土日,及び+3日を使い,更にその詳細についてAI君と共に検討した結果,1台のSynology NASの上に2つのサイトを構築し安定稼働させることができました.2つ目以降のサイトの内容はこれから作っていこうと思ています.

作業概要は,

(1) DSM->File Stationで既存wordpressフォルダー複製

(2)phpMyAdminによる既存のData Baseの移行と修正

(3) Web Stationによるportal(仮想ドメイン?)の設定,

(4) DMSでのText Editorによるwp-config.php, .htaccessの修正,

等です.

当初の検討では,Conatainer Managerを使用したwordpressのコンテナ化によるマルチドメインを検討しましたが,結局は,Web StationのVirtual Host(仮想ホスト)を使用することで一つのNASの上に複数のサイト構築が可能でした.

以下に詳細を解説します.なお,Synology NASの解説は,日本語版では冗長なのでそれを避けて用語などは英語版の表記としています.

構築後しばらくの間で稼働状況についてモニターリングし,追加の対策を実施している.具体的には,cache関係,portal severの設定関係で,トリッキーな挙動(ここに気づくのに時間かがかかった)と安定稼働には必須の設定を追加した.



構築方法

作業する前にバックアップを取ってから進めてるのが良いです.

作業前のバックアップ

hyper backupで現時点での/web以下(既存のwordpressファイルが格納されているfoler)をバックアップします.その他,以下の設定で実行しておきます.

  1. 設定
    • Folder : /volume1/web
    • Application : MariaDB 10
    • Web Station
  2. Backj up nowボタンを押す

DDNSの取得

以下の方法により構築する2つ目のDomain Nameを用意する.

  • Synology NASの場合,2台以上のNASを持っているのであれば,External Access->DDNSからSynologyからDomain NameをNASの1台に付き1つの名前を頂ける.
  • myDNS.jp様のサイトから複数個のDomain Nameを頂ける.

Let’s Encription証明書

証明書については,Synology NASを複数持っているので,それぞれについてSynologyからDomain Nameを取得している.

表1. Let’s Encrypt の代表的なレート制限

制限の種類内容
同一FQDNでの再発行(同一証明書内容)1週間に5回まで
同一登録ドメイン(例:example.com)に対する新規証明書発行1週間に50回まで
失敗した認証試行数1時間に5回まで
アカウントごとの登録レート制限あり(通常の使用で問題なし)

Web Stationでの設定

設定の前準備(Control Panelでの作業で示している)として以下のAccess Control Profileを作成しておく.これは安全装置であり、即使用するものではなく、メンテナンス時に有効化して外部からのアクセスを完全に遮断する装置となる。

Longin Portal->Advanedを開き、以下の設定を作成する.

192.168.11.0/24=Allow、All=Denyとしているのは、192.168.11.0に対してLocalからのアクセスのみを許可する設定とする。これは、IPレベルにる入口制御である。

具体的な機能は以下の通り。

  1. Webアプリ(wordpress)の前段での制御である。即ち、防御の最前線である。
  2. 認証画面すら表示させない
  3. アプリ脆弱性以前に”通信自体”を止める

表2. Access Control Profile

Image

前準備は完了した。

web stationでは,以下の項目を設定することができる.web stationでの設定手順は,(3) Script language Settings →(2) Web Service →(1) Web Portalの順となる.

  1. Web Portal
  2. Web Service
  3. Script Language Settings
  4. Error Page Settings
Image

図1. Web Stationの設定画面 (Script Language Settingsを選択している状況)

Script Language Settingsでprofileを作成:

作業

  1. Creatボタンを押す
  2. Create Profile – Configre general settings画面が現れる
  3. 以下の項目に入力する(後で修正は可能)
    • Profile name : <profile for 2nd site>
    • Description : <同上など,適当に>
    • PHP version : <インストールしているphpのバージョンがリストされるので,一つを選ぶ,ex: php8.2>
      • Enabe PHP cache : チェックする
      • Enable Xdebug : チェックする
      • Enable display_erros to display PHP error message :チェックする
      • (以上のチェックは,作成後に変更可能)
    • Customized PHP open_basedir : Default
    • Nextボタンをクリック
  4. Configure extensions画面が現れる
    • 全てを選択(理解できていないので全て選択,重複エラーでは重複項目のチェックを外す)
    • Nextボタンを押す
  5. Configure FPM settings画面が現れる(FastCGI Process Manager)
    • FPM mode : dynamic (PHP-FPMを使用せず,web serverがPHPを直接処理する)
    • Max processes: 102 (default)
    • Start servers : 2 (default)
    • Min spare servers : 2 (default)
    • Max spare servers : 4 (default)
    • Nextボタンを押す
  6. Configure core settings画面が現れる
    • mysqli.default_socket : /run/mysqld/mysqld10.sock (に修正, wp-config.phpの記載に合わせる)
    • pdo_mysql.default_socket : /runmysqld/mysqld10.sock (に修正, wp-config.phpの記載に合わせる)
    • 残りは規定値のまま
    • Nextボタンを押す
  7. Confirm settings画面が現れる
    • Createボタンを押す
  8. 以上

Web Service の作成:

Web Serviceでは,以下の項目が表示される.

  1. Default Service
  2. Native script language website
  3. Third-party Package website
Image

図2. Web Stationの設定画面 (Web Seviceを選択している状況)

今回の作業では,Native script language websiteを作成する.

Web Serviceは,site Aとsite Bで共用は可能だが,今回は,専用にそれぞれ作成した.

作業:

Image
Image
Image
  1. Createボタンを押す
  2. Select a service type画面が現れる
    • static websiteとContainerized script language websiteは選択しない.
    • Native script language websiteをチェック(選択)する
    • Service : リスト他されphpの中から「script language settings」にて作成した時に設定したphp version である「php 8.2」を選択する
    • 右隣のプルダウンメニューには,「script language settings」で作成したprofileがリストされてるのでそれを選択する.
    • Nextボタンを押す
  3. Configure geral setting画面が現れる
    • Name : <site B用であることが分かるような名前にする>
    • Descriptiion : <適当に>
    • Document root : /web/<site B>
    • HTTP back-end server : Apache HTTP Sever 2.4
    • 残りの項目は規定値(default)
    • Nextボタンを押す
  4. Confirm settings画面が現れる
    • Createボタンを押す
    • Virtual hostを作るには,http groupのread permissionが必要であり自動で作成するとのメッセージが出るので,「OK」ボタンを押す
    • Native script laguage website項目に,Service typeはPHP,Nameには作成した名前でリストされる.
    • 完了
  5. 以上

Web Portalの作成 :

web Portalでは,以下の項目が表示される.

  1. Customized Portal
  2. Default Portal
Image

図3. Web Portal 画面


今回の作業では,Customized Portalを以下の手順で作成する.

Image
Image

図4. Web Profile設定

作業:

  1. Createボタンを押す
  2. Select a portal type画面が現れる
  3. Web service portalをマウスクリックする.
  4. Set up a web service portal画面が現れる
    • Service : <作成したweb serviceがリストされるので,それを選択する>
    • Status : Normal (選択したweb serviceが正常な場合にNormalと表示されている)
    • Portal type : <Name-based
    • Hostname : <domain name>, ex:????.myDNS.jp
    • Port : 80/443 (でもOKだと思う), 今回はHTTPS: 443とした
    • HTTPS settigs : HSTSをチェック
    • Access control profile : <Access Control Profileの作成で作成したプロファイル名をリストから選択する.
      指定しない場合はネットからフルアクセスされる
    • Error page profile : Default error page profile (defaultのまま)
    • Enambe access log : 今回はチェックなし
    • Createボタンを押す
    • Customized portal項目に作ったPortalがリストされる
    • 完了
  5. 以上
  6. 注) Synology NASのDSMにあるDDNSは、1つしか登録できない。従って、DDNSプロバイダ(myDNS.jp)には2つ目のurlは登録できない。当サイトでは、synology製品に付いてくるドメインを1つ目のurlに設定している。

人気順