サーバー移転直後にSSL証明書エラー、メール不達、API障害が同時発生する原因を解説。DNS伝播・環境変数・証明書の落とし穴と、失敗しないための事前チェックリストを紹介します。
こんな経験、ありませんか?
「サーバー移転が完了した翌朝、クライアントから『サイトに鍵マークが出ない』『お問い合わせメールが届かない』『決済APIが動かない』と立て続けに連絡が来た」——弊社にも以前、そういった案件がありました。移転作業自体は深夜に終わっていたのに、翌営業日に複数の障害が同時発生するという、最悪のスタートを切ったケースです。
サーバー移転は「ファイルをコピーしてDNSを切り替えれば終わり」と思われがちですが、実際にはSSL証明書・メール送受信・外部API連携という3つのレイヤーが、それぞれ異なる理由で同時に崩壊するリスクを抱えています。この記事では、その「本当の理由」を技術的に掘り下げながら、移転前に潰しておくべきポイントを具体的に解説します。
なぜ「3つ」が同時に壊れるのか——原因の構造を理解する
一見バラバラに見えるSSL・メール・APIの障害には、共通した根本原因があります。それは**「移転前の環境に依存した設定が、新環境に引き継がれていない」**という一点に集約されます。
flowchart TD
A[サーバー移転] --> B[DNS切り替え]
B --> C{各レイヤーの依存先}
C --> D[SSL証明書\n旧サーバーのもの or 未発行]
C --> E[メール設定\nSPF/DKIM/MXレコード不整合]
C --> F[API連携\n環境変数・IPホワイトリスト未更新]
D --> G[ブラウザ警告・HTTPS障害]
E --> H[メール不達・迷惑メール扱い]
F --> I[認証エラー・Webhook失敗]SSL証明書は、旧サーバーで取得したものは新サーバーでは当然無効です。Let's Encryptの場合、ドメインの所有確認がHTTPチャレンジ(ポート80へのアクセス)で行われるため、DNSが完全に新サーバーへ向いていない状態で証明書を発行しようとすると失敗します。さらに、移転先がNginxかApacheかで設定ファイルの記述が異なるため、証明書の配置場所を間違えるケースも頻発します。
メールに関しては、SPF・DKIM・DMARCという3つのDNSレコードが旧サーバーのIPを参照したままになることが主因です。新サーバーのIPからメールを送信しても、受信サーバー側でSPFチェックが「PermError」または「Fail」となり、そのまま迷惑メールボックスへ直行——あるいは配送自体が拒否されます。
外部API(決済、LINE通知、Slack Webhook、Google APIなど)については、APIプロバイダー側でIPホワイトリストを設定している場合、新サーバーのIPが登録されていないため認証エラーが発生します。加えて、LaravelやWordPressの.envファイルやwp-config.phpに書かれたAPIキー・エンドポイントURLが旧環境のものをそのまま使っているケースも多く、二重の原因が重なります。
具体的な原因と対処手順
1. SSL証明書:DNSの伝播タイミングと証明書発行のデッドロック
Let's Encryptを使う場合、DNS切り替え直後は伝播が完了していないため、Certbotが新サーバーでのHTTPチャレンジに失敗します。これを回避するには、DNS-01チャレンジを使う方法が最も確実です。
# Route53やCloudflareなどDNSプラグインを使用
certbot certonly \
--dns-cloudflare \
--dns-cloudflare-credentials ~/.secrets/cloudflare.ini \
-d example.com \
-d www.example.com
Nginxの場合、証明書パスの設定も忘れずに更新してください。
# /etc/nginx/sites-available/example.com
server {
listen 443 ssl;
server_name example.com www.example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
# HTTPSリダイレクト設定も確認
add_header Strict-Transport-Security "max-age=31536000" always;
}
server {
listen 80;
server_name example.com www.example.com;
return 301 https://$host$request_uri;
}
2. メール:SPF・DKIM・MXレコードの3点セットを必ず更新
新サーバーのIPが確定したら、DNS切り替えと同時に以下の3レコードを更新します。「後でやる」が最大の失敗原因です。
# SPFレコード(新サーバーIPに更新)
example.com. TXT "v=spf1 ip4:203.0.113.10 include:sendgrid.net ~all"
# MXレコード
example.com. MX 10 mail.example.com.
# DKIMレコード(新サーバーで生成した公開鍵を設定)
default._domainkey.example.com. TXT "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb..."
# DMARCレコード(ポリシーの確認)
_dmarc.example.com. TXT "v=DMARC1; p=quarantine; rua=mailto:[email protected]"
Postfixを使っている場合は、新サーバーでのDKIM鍵の再生成も必要です。
# OpenDKIMで鍵を再生成
opendkim-genkey -t -s default -d example.com
# 生成されたdefault.txtの内容をDNSのTXTレコードに設定
cat default.txt
3. API連携:環境変数とIPホワイトリストの二重確認
Laravelプロジェクトでは、.envファイルが旧サーバーの設定のままコピーされることがよくあります。移転後は必ず環境固有の値を見直してください。
# .envの確認ポイント
APP_URL=https://example.com # ← 新URLになっているか
DB_HOST=127.0.0.1 # ← 新DBホスト
MAIL_HOST=smtp.example.com # ← 新メールサーバー
STRIPE_SECRET_KEY=sk_live_xxxx # ← 本番キーか確認
AWS_DEFAULT_REGION=ap-northeast-1 # ← リージョン設定
# キャッシュのクリアを忘れずに
php artisan config:clear
php artisan cache:clear
php artisan route:clear
StripeやPAY.JPなどの決済APIはIPホワイトリストの設定が必要な場合があります。新サーバーのグローバルIPを確認して、各サービスの管理画面で追加してください。
# 新サーバーのグローバルIPを確認
curl -s https://api.ipify.org
# または
wget -qO- https://ipinfo.io/ip
よくある失敗パターンと対処法
移転案件を多数経験してきた中で、特によく遭遇するミスを整理しました。
```bash
wp option update siteurl 'https://example.com'
wp option update home 'https://example.com'
# シリアライズされたデータも含めて一括置換
wp search-replace 'http://old-server.example.com' 'https://example.com' --all-tables
```
```bash
# /etc/hosts(Mac/Linux)または C:\Windows\System32\drivers\etc\hosts(Windows)
203.0.113.10 example.com www.example.com
```
```bash
# Crontabの確認・設定
crontab -l
crontab -e
# Laravel Scheduler
* * * * * cd /var/www/html && php artisan schedule:run >> /dev/null 2>&1
```
あるクライアントでの実例:ECサイト移転で決済が3時間停止した件
神奈川県内の製造業クライアントのECサイト移転を引き受けた際の話です。前任の制作会社が行った移転直後から決済エラーが発生し、弊社に緊急対応の依頼が来ました。
調査の結果、原因は3層で重なっていました。①新サーバーのIPがStripeのWebhookの送信元として認識されなかった(Nginx側でCloudflareのIPレンジ外を弾く設定が残っていた)、②.envのAPP_URLがhttp://のままでHTTPSリダイレクト後にCSRFトークンの検証が失敗していた、③決済完了後の確認メールがSPF認証エラーで不達になっていた——という三重苦です。
対処には約3時間かかりましたが、これらはすべて事前チェックで防げた障害でした。以降、弊社では移転案件に必ず移転前チェックリストとステージング環境での72時間テスト期間を設けるようにしています。
サーバー管理、丸ごとお任せください
サーバー保守・運用
監視・障害対応・パフォーマンス改善まで、安定稼働をサポートします
※ 通常1営業日以内にご返信します
まとめと次のステップ
サーバー移転後の障害は「運が悪かった」ではなく、「確認しなかった」が原因です。特にSSL・メール・APIの3つは、それぞれ独立した依存関係を持つため、1つの作業で完結せず、DNS・サーバー設定・外部サービス管理画面の3箇所を同期させる必要があります。
移転を予定している方は、まず以下のチェックリストを使って現状の設定を棚卸しすることから始めてください。「どこに何が設定されているか」を把握するだけで、移転後の障害の7割は事前に防げます。
移転作業を自社で行う場合でも、このリストを1つひとつ確認するだけで大幅にリスクを減らせます。ただし、ECサイトや予約システムなどダウンタイムが直接損失につながる環境では、専門家によるレビューを挟むことを強くお勧めします。
Fivenine Designでは、サーバー移転の設計・実施・移転後モニタリングまでを一貫してサポートしています。「今使っているサーバーが古くなってきた」「移転を検討しているが不安」という方は、お気軽にご相談ください。