どうもこんにちは塚本です。
この記事では、エックスサーバー(シンレンタルサーバー、スターサーバーも同様)のドキュメントルートにLaravelを設置したサイトに、無料独自SSLを設定する際にハマってしまった方向けに、解決策を紹介します。
私自身、同様の問題に直面し、解決に時間を要しました。
本記事が、同じような状況でお困りの方の助けになれば幸いです。
TL;DR
- Laravelのドキュメントルートに
.htaccess
を設置しない。
- 設置する場合は、HTTP-01チャレンジの通過設定を追記する。
無料独自SSL設定が通らない原因
(今回のパターンに限ります)
エックスサーバーで無料独自SSL設定が通らない主な原因は、以下の通りです。
公開ディレクトリとLaravelの公開ディレクトリの差異
- エックスサーバーの標準的な公開ディレクトリは、「
$HOME/サーバーID/ドメイン名/public_html
」です。
- 一方、Laravelのデフォルト公開ディレクトリは「
public
」です。
- そのため、通常は「
$HOME/サーバーID/ドメイン名/public_html/public
」にLaravelのファイルが配置されます。
.htaccessによるリダイレクト
公開ディレクトリが違うため、このままではドメイン名にアクセスしてもLaravelは動きません。
したがって、「$HOME/サーバーID/ドメイン名/public_html
」に.htaccess
を設置してドメイン名へのアクセスを「$HOME/サーバーID/ドメイン名/public_html/public
」へリダイレクトさせていました。
今回のケースでは、これが直接の原因でした。
Let’s Encryptの無料独自SSL設定について
Let’s Encryptは、Webサイトの所有者であることを確認するために、主にHTTP-01チャレンジを行います。
HTTP-01チャレンジとは
ドメインのルートディレクトリにある /.well-known/acme-challenge/
ディレクトリに特定のファイルを配置し、そこに HTTP でアクセスすることでドメインの所有権を確認する手法です。
サーバの管理画面で無料独自SSL設定を行うと、自動で該当ディレクトリが作成され、HTTP-01チャレンジを受け付けるようです。
追加した.htaccessが邪魔していた
しかし、僕が追記した.htaccess
のせいですべてのリクエストが public
ディレクトリにリダイレクトされるため、Let’s Encrypt が検証ファイルを正常に読み込めていなかったようです。
対処法
# Let's Encrypt の認証を許可
RewriteRule ^\.well-known/acme-challenge/ - [L]
こちらの記述を.htaccess
に追記し、HTTP-01チャレンジを妨げないようにすると無料独自SSL設定の更新ができました。
まとめ
初歩的なトラブルですが、灯台もと暗しという感じで全く気付けませんでした。
Let’s Encrypt側の問題だろうと放置していたのですがあまりに更新できないので「もしや・・・?」と思い気付いた感じです。
繰り返しになりますが、本記事が、同じような状況でお困りの方の助けになれば幸いです。
どうもこんにちは塚本です。
この記事では、エックスサーバー(シンレンタルサーバー、スターサーバーも同様)のドキュメントルートにLaravelを設置したサイトに、無料独自SSLを設定する際にハマってしまった方向けに、解決策を紹介します。
私自身、同様の問題に直面し、解決に時間を要しました。
本記事が、同じような状況でお困りの方の助けになれば幸いです。
TL;DR
.htaccess
を設置しない。無料独自SSL設定が通らない原因
(今回のパターンに限ります)
エックスサーバーで無料独自SSL設定が通らない主な原因は、以下の通りです。
公開ディレクトリとLaravelの公開ディレクトリの差異
$HOME/サーバーID/ドメイン名/public_html
」です。public
」です。$HOME/サーバーID/ドメイン名/public_html/public
」にLaravelのファイルが配置されます。.htaccessによるリダイレクト
公開ディレクトリが違うため、このままではドメイン名にアクセスしてもLaravelは動きません。
したがって、「
$HOME/サーバーID/ドメイン名/public_html
」に.htaccess
を設置してドメイン名へのアクセスを「$HOME/サーバーID/ドメイン名/public_html/public
」へリダイレクトさせていました。今回のケースでは、これが直接の原因でした。
Let’s Encryptの無料独自SSL設定について
Let’s Encryptは、Webサイトの所有者であることを確認するために、主にHTTP-01チャレンジを行います。
HTTP-01チャレンジとは
ドメインのルートディレクトリにある
/.well-known/acme-challenge/
ディレクトリに特定のファイルを配置し、そこに HTTP でアクセスすることでドメインの所有権を確認する手法です。サーバの管理画面で無料独自SSL設定を行うと、自動で該当ディレクトリが作成され、HTTP-01チャレンジを受け付けるようです。
追加した.htaccessが邪魔していた
しかし、僕が追記した
.htaccess
のせいですべてのリクエストがpublic
ディレクトリにリダイレクトされるため、Let’s Encrypt が検証ファイルを正常に読み込めていなかったようです。対処法
こちらの記述を
.htaccess
に追記し、HTTP-01チャレンジを妨げないようにすると無料独自SSL設定の更新ができました。まとめ
初歩的なトラブルですが、灯台もと暗しという感じで全く気付けませんでした。
Let’s Encrypt側の問題だろうと放置していたのですがあまりに更新できないので「もしや・・・?」と思い気付いた感じです。
繰り返しになりますが、本記事が、同じような状況でお困りの方の助けになれば幸いです。