【Laravel】Valet + Vite + httpsでのエラーを解消する
こんにちは、フリーランスエンジニアの太田雅昭です。
Valet + Vite
Valetはartisan serveの代わりに使用することのできる、サーバー関連のアレです。これとViteを併用すると、エラーが出てなかなか面倒くさかった思い出ができましたので、メモがわりに残させていただきます。
事件概要
今回、valetでhttpsのアクセスを作成しました。ドメインはデフォルトの.testではなく、TLDである.xyzを用いています。するとエラーが発生しました。
the content must be served over HTTPS
まずvite関連のファイルをhttpsで提供する必要があります。以下はだめな例です。
// vite.config.ts
{
server:{
https: true,
}
}
ERR_SSL_VERSION_OR_CIPHER_MISMATCH
クライアントとサーバーとで、証明書関連の情報が一致していないようです。Valetの証明書情報を使用する必要があります。
// vite.config.ts
{
server:{
https: {
cert: "/Users/<ユーザー名>/.config/valet/Certificates/<ドメイン名>.crt",
key: "/Users/<ユーザー名>/.config/valet/Certificates/<ドメイン名>.key",
},
}
}
すると、開発ログにUsing Valet certificate to secure Vite.が出るようになりました。
ERR_CERT_COMMON_NAME_INVALID
SSL証明書のドメイン名(Common Name)が実際のアクセス先と一致していないそうです。Viteのファイルへのアクセスに[::]が含まれているのに関わらず、証明書が<ドメイン名> 用に発行されているため、この不一致が発生しているとのことです。以下のようにします。
// vite.config.ts
{
host: "<ドメイン名>",
hmr: {
host: "<ドメイン名>",
},
}
blocked by CORS policy
でましたCORSエラーです。以下のようにします。
// vite.config.ts
{
cors: true,
}
これで正常に動くようになりました。
まとめ
まとめると以下のような具合です。
// vite.config.ts
{
server:{
https: {
cert: "/Users/<ユーザー名>/.config/valet/Certificates/<ドメイン名>.crt",
key: "/Users/<ユーザー名>/.config/valet/Certificates/<ドメイン名>.key",
},
}
host: "<ドメイン名>",
hmr: {
host: "<ドメイン名>",
},
cors: true,
}