🔧

【お名前.com+さくら】ルートドメインとサブドメインを異なるサーバーで運用する方法

に公開

はじめに

LaravelなどのWebアプリケーションを開発していると、機能ごとにドメインやサーバーを分離したくなる場面が出てきます。特に「ルートドメインはそのまま、サブドメインだけ別のサーバーで運用したい」という要件はよくあります。

本記事では、お名前.comで取得したドメインを使い、ルートドメインはそのままに、サブドメインのみさくらのレンタルサーバーで運用する方法について解説します。

対象者

  • LaravelなどのWebアプリをサブドメインで公開したい方
  • ドメインはお名前.comで管理している方
  • サブドメインの運用先を別サーバーにしたい方

背景と目的

私が遭遇したケースでは、当初はすべてのWeb・DB・ドメインをお名前.comレンタルサーバーで一元管理していました。
しかし、以下の理由で構成の見直しをしました。

  • Laravelアプリのうち一部(ユーザー機能)を一時的に公開したかったため
  • 管理者機能の開発中にユーザー画面へ影響を与えないよう、サーバーを分離して安全性を確保するため

構成

この記事で扱う構成は以下の通りです。

旧構成(すべて同一サーバー)

項目 内容
ドメイン管理 お名前.com
Webサーバー お名前.com レンタルサーバー
DBサーバー お名前.com 内 MySQLサーバー
Laravelアプリ配置先 ルートドメイン直下
サブドメイン なし

新構成(サブドメインを分離)

項目 ルートドメイン(example.jp) サブドメイン(sub.example.jp)
ドメイン管理 お名前.com お名前.com
Webサーバー お名前.comレンタルサーバー さくらのレンタルサーバー
DBサーバー お名前.com MySQL さくら MySQL 8.0
Laravelアプリ配置先 - サブドメイン直下

サブドメインを異なるサーバーで運用する設定手順

今回のような構成における、ルートとサブドメインを別々のサーバーに分離して運用するための設定手順を解説します。

想定構成

項目 内容
サブドメイン sub.example.jp(お名前.com管理)
サーバー さくらレンタルサーバ スタンダード(Apache)
Laravel配置先 /home/xxxxxx/laravel-app/
公開ディレクトリ /home/xxxxxx/www/sub.example.jp/

ステップ0:事前準備

  • Laravelアプリ本体は手元で npm run build / composer install --no-dev を済ませておく
  • .env.sub のような環境ファイルを作成し、事前に .env にリネーム準備
  • DB接続情報、APP_URL、APP_ENVなど環境値を正確に設定しておく

ステップ1:SSL有効化(Let's Encrypt)

  • さくらのコントロールパネル → ドメイン設定 → SSL設定 → 無料SSLを発行
  • .env にて APP_URL=https://sub.example.jp に変更

※ サブドメイン作成直後は、SSL証明書の発行に失敗することがあります。10分ほど時間を置いてから申請することで回避できます。


ステップ2:DNS設定確認

目的: sub.example.jp がさくらサーバーに向くことを確認

Aレコード:sub.example.jp → xxx.xxx.xxx.xxx

※ DNS反映には時間がかかることがあります。
以下のコマンドで反映状況を随時確認できます。

$ ping sub.example.jp
$ nslookup sub.example.jp
  • ping は指定ホスト名が正しいIPアドレスに変換されているか確認できます
  • nslookup はDNSサーバーに直接問い合わせて、設定の反映状況を詳しく確認できます

ステップ3:Laravel本体をアップロード

  • SFTPで /home/xxxxxx/laravel-app/ にアプリ一式をアップロード
  • .env.sub.env にリネームし、環境情報を編集

ステップ4:公開用index.phpを編集

サブドメインの公開ディレクトリ直下に index.php を配置し、アプリケーションのエントリーポイントとします。

推奨配置: /home/xxxxxx/www/sub.example.jp/index.php

例:

index.php
<?php
require __DIR__ . '/../../laravel-app/vendor/autoload.php';
$app = require_once __DIR__ . '/../../laravel-app/bootstrap/app.php';
$kernel = $app->make(Illuminate\Contracts\Http\Kernel::class);
$response = $kernel->handle(
    $request = Illuminate\Http\Request::capture()
)->send();
$kernel->terminate($request, $response);

ステップ5:.htaccessを設置

ルーティング処理を Laravel に渡すための設定です。公開ディレクトリ直下に配置してください。

推奨配置: /home/xxxxxx/www/sub.example.jp/.htaccess

例:

.htaccess
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^ index.php [L]
</IfModule>

ステップ6:Laravelキャッシュの再構築

以下のコマンドを実行し、キャッシュクリアをします。

$ php artisan config:clear
$ php artisan route:clear
$ php artisan view:clear
$ php artisan config:cache

ステップ7:アクセス確認とエラー対応

実際にブラウザでサブドメインにアクセスします。
馬表示されない場合は、以下の対応を参考にしてみてください。

エラー対応策:

症状 原因 対応策
白画面 index.phpのパスミス requireの相対パス確認
500エラー .env or パーミッション Laravelログ確認
URLが http:// になる APP_URL未設定 .env に正しい値設定、SSL確認

私自身がハマった落とし穴とその対策

ケース①:DNSレコードの作成

sub.example.jp を CNAME レコードで追加しようとしたところ、次のエラーで登録できませんでした。
→ CNAMEは他レコードと共存できないため、これは避けるべき構成でした。

TXTレコードとCNAMEレコードに同じホスト名は登録できません。

対応策:
CNAMEが使えない場合は、対象サーバーのIPv4アドレスを指定するAレコードで対応します。
→ この設定で sub.example.jp は無事、さくらサーバーへ向くようになりました。

タイプ: A  
ホスト名: sub.example.jp  
値: xxx.xxx.xxx.xxx(さくらのIPv4アドレス)  
TTL: 600

ケース②:ドキュメントルート未指定による表示エラー

サブドメインに対応するWebサーバー上の**ドキュメントルート(公開フォルダ)**を正しく指定していなかったことで、表示エラー(403/404)が発生。

多くのレンタルサーバーでは、以下のように、サブドメインごとの専用ディレクトリ設定が必要です。

  • example.com/home/ユーザー名/www/
  • sub.example.com/home/ユーザー名/www/sub//home/ユーザー名/sub.example.com/

対応策:

  • public_htmlwww配下に新しいフォルダ(例:sub)を作って対応
  • サーバー管理画面でサブドメインに対応する正しいフォルダを指定
  • WebサイトのURLを開き、公開用のフォルダに入っているデータが表示されていればOKです

ケース③:「www」共用設定によるSSL認証の失敗

Webサーバーの設定で「wwwフォルダをサブドメインにも使う」チェックを有効にしていたことで、ルートドメインとサブドメインが同じ公開フォルダを参照するようになり、SSL認証で失敗。

Let's Encryptは、HTTP認証やDNS認証によりドメイン管理権限を確認しますが、正しいWebルートに認証ファイルが存在しないと失敗します。

対応策:

  • 「wwwフォルダを使う」チェックをオフ
  • サブドメイン用の独立したフォルダとサーバーを紐付け
  • 結果として、正しい認証ファイルが配置され、SSL証明書の取得に成功しました。

比較表:サブドメインとSSL設定の組み合わせ

状態 SSL認証 備考
ルートとサブドメインが同一サーバー 通る wwwチェック有効でもOK
サブドメインを別サーバーに 通らない(設定次第) wwwチェックを外す必要あり
wwwチェックを外し、専用ルート設定 通る 最も安全な方法

運用トラブルを防ぐためのポイント

  • サブドメインを管理する際は、DNS設定 / Webサーバー設定 / ファイル構成の3点をセットで確認すること
  • レンタルサーバーでは1つの設定が他のドメインにも影響する場合があるため、設定前にバックアップやスクショを取っておくと安心
  • サブドメインごとにWebサーバーを分ける場合は、SSL証明書の取得タイミングと取得方式に注意
  • Let's Encrypt使用時は、WebルートとDNSの整合性が重要
  • 難しい場合は「DNS認証タイプのSSL取得」やCertbotのDNSプラグイン導入も視野に入れるとよい

おわりに

今回の構成変更を通して、サブドメインを分離して別サーバーでLaravelアプリを運用することで、開発環境の自由度や保守性が大きく向上することを実感しました。

私自身、最初はなかなかWebアプリを公開できず非常に戸惑いましたが、一つ一つ確認していくことで、ドメイン設定の本質が理解できるようになりました。この記事が、同じように構成見直しを考えている方の一助になれば幸いです。


株式会社ONE WEDGE

【Serverlessで世の中をもっと楽しく】
ONE WEDGEはServerlessシステム開発を中核技術としてWeb系システム開発、AWS/GCPを利用した業務システム・サービス開発、PWAを用いたモバイル開発、Alexaスキル開発など、元気と技術力を武器にお客様に真摯に向き合う価値創造企業です。
https://onewedge.co.jp/

GitHubで編集を提案

Discussion