ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|---|
|
サブドメインとは
例: example.com がルートドメイン → blog.example.com / admin.example.com / api.example.com がサブドメイン。
設定は 2 段階:
- DNS: サブドメインを IP アドレス or 別ドメインへ向ける
- Web サーバ: サブドメインのリクエストを受けて処理する設定
DNS 設定
A レコード(IP 直接指定)
# DNS 管理画面 (Cloudflare / Route 53 / お名前.com 等)
# サブドメイン タイプ 値 TTL
blog A 192.168.1.10 3600
admin A 192.168.1.10 3600
api A 192.168.1.11 3600
# IPv6 なら AAAA
www AAAA 2001:db8::1 3600
CNAME レコード(別ドメインへ)
# CDN・別サービス経由
blog CNAME mysite.netlify.app.
api CNAME myapi.herokuapp.com.
# 注意:
# - ルートドメインに CNAME は基本不可 (一部 DNS は ALIAS / ANAME で対応)
# - サブドメインだけ CNAME 可能
ワイルドカード
# 全サブドメインを 1 つの IP に
* A 192.168.1.10
# foo.example.com / bar.example.com 等 すべて 192.168.1.10 へ
# テナント別 (tenant1.app.example.com / tenant2.app.example.com 等) に便利
DNS 反映確認
# dig で確認
$ dig blog.example.com
;; ANSWER SECTION:
blog.example.com. 3600 IN A 192.168.1.10
# nslookup
$ nslookup blog.example.com
# Linux/Mac で hosts ファイルでテスト
$ sudo vi /etc/hosts
192.168.1.10 blog.example.com
Nginx 設定
# /etc/nginx/sites-available/blog.example.com
server {
listen 80;
server_name blog.example.com;
root /var/www/blog;
index index.html index.php;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
# 有効化
$ sudo ln -s /etc/nginx/sites-available/blog.example.com /etc/nginx/sites-enabled/
$ sudo nginx -t # 構文チェック
$ sudo systemctl reload nginx
複数サブドメインを 1 設定で
# サブドメイン別に root 切替
server {
listen 80;
server_name ~^(?.+)\.example\.com$;
root /var/www/$sub;
index index.html;
}
# blog.example.com → /var/www/blog
# admin.example.com → /var/www/admin
Apache 設定
# /etc/apache2/sites-available/blog.example.com.conf
ServerName blog.example.com
DocumentRoot /var/www/blog
AllowOverride All
Require all granted
ErrorLog ${APACHE_LOG_DIR}/blog-error.log
CustomLog ${APACHE_LOG_DIR}/blog-access.log combined
# 有効化
$ sudo a2ensite blog.example.com.conf
$ sudo systemctl reload apache2
SSL 証明書 (Let\'s Encrypt)
個別証明書
# certbot で取得 + 自動設定
$ sudo certbot --nginx -d blog.example.com
$ sudo certbot --apache -d blog.example.com
# 複数サブドメイン同時
$ sudo certbot --nginx -d example.com -d www.example.com -d blog.example.com -d api.example.com
# 自動更新確認 (cron で実行されている)
$ sudo certbot renew --dry-run
ワイルドカード証明書(*.example.com)
# DNS-01 challenge が必要 (HTTP-01 では取得できない)
$ sudo certbot certonly --manual --preferred-challenges dns \
-d "*.example.com" -d example.com
# 表示された TXT レコードを DNS に追加 → 確認後 Enter
# 90 日ごとに手動更新必要
# Cloudflare 等の DNS API なら自動更新可能
$ sudo certbot certonly --dns-cloudflare \
--dns-cloudflare-credentials ~/.secrets/cloudflare.ini \
-d "*.example.com"
Laravel でサブドメインルーティング
// routes/web.php
// 単一サブドメイン
Route::domain('api.example.com')->group(function () {
Route::get('/users', [ApiUserController::class, 'index']);
});
// パラメータ付き (テナント別 SaaS)
Route::domain('{tenant}.example.com')->group(function () {
Route::get('/dashboard', function ($tenant) {
return "Tenant: $tenant";
});
});
// 設定: config/app.php
'url' => env('APP_URL', 'http://example.com'),
// ローカル開発: /etc/hosts に追加
// 127.0.0.1 blog.example.test
// 127.0.0.1 admin.example.test
Rails でサブドメインルーティング
# config/routes.rb
Rails.application.routes.draw do
constraints subdomain: "admin" do
namespace :admin do
resources :users
end
end
constraints subdomain: "api" do
namespace :api do
resources :users
end
end
end
# 動的サブドメイン (テナント別)
constraints subdomain: /.+/ do
get '/', to: 'tenants#show'
end
# request.subdomain でアクセス可能
Cloudflare 経由の場合
# Cloudflare ダッシュボード → DNS
# サブドメインを A レコードで追加
# - Name: blog
# - Type: A
# - IPv4: サーバ IP
# - Proxy status: Proxied (オレンジ雲) または DNS only
# Proxied だと:
# - CDN 経由 (高速化 + DDoS 対策)
# - サーバの実 IP は隠される
# - SSL 終端は Cloudflare → サーバ間は別途設定 (Full / Strict 推奨)
# サブドメイン用ページルールも設定可能
# blog.example.com/* → Cache Level: Cache Everything
テスト・デバッグ
# DNS 反映確認
$ dig blog.example.com +short
192.168.1.10
# HTTP 接続テスト
$ curl -I http://blog.example.com
HTTP/1.1 200 OK
Server: nginx/1.18.0
# Host ヘッダ指定 (DNS 反映前テスト)
$ curl -H "Host: blog.example.com" http://192.168.1.10/
# SSL 確認
$ openssl s_client -connect blog.example.com:443 -servername blog.example.com
# ローカル hosts でテスト (Mac/Linux: /etc/hosts, Windows: C:\Windows\System32\drivers\etc\hosts)
192.168.1.10 blog.example.com
よくあるトラブル
- DNS 反映待ち: TTL の時間(最大 24-48 時間)
- ブラウザキャッシュ: シークレットウィンドウで確認
- SSL エラー: 証明書がサブドメインを含んでいない
- nginx の reload 忘れ:
sudo nginx -t && sudo systemctl reload nginx - ファイアウォール: ポート 80/443 開放
関連記事
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページ
子ページはありません
同階層のページ
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript base URL 取得方法|window.location.origin と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- Laravel キャッシュクリア完全ガイド(cache:clear / config:clear / 2026-05-18 07:42:07
- プロジェクトの作成と削除 2026-05-18 07:42:07
- インストール直後にNetbeansが反応しない 2026-05-18 07:42:07
- 動画やチャンネルの検索 2026-05-18 07:42:07
- APIキー取得方法 2026-05-18 07:42:07
- チャンネル情報の取得 2026-05-18 07:42:07
- API 入門 — Web API(REST / GraphQL / gRPC / 2026-05-18 07:42:07
- インストール(eclipseプラグイン) 2026-05-18 07:42:07
- Laravel「Dotenv values containing spaces must be surrounded 2026-05-18 07:42:07
- エラー一覧 2026-05-18 07:42:07
- curl: (51) SSL: certificate subject name '~' does not match 2026-05-18 07:42:07
- インストール方法(Windows版) 2026-05-18 07:42:07
- JSONから配列に変換 2026-05-18 07:42:07
- 処理を一定時間待つ 2026-05-18 07:42:07
- A non well formed numeric value encountered 2026-05-18 07:42:07
コメントを削除してもよろしいでしょうか?