Laravelをエックスサーバーのサブドメインで動かそうとすると、思わぬ落とし穴があります。今回は実際の構築例とともに、安全にLaravelをサブドメインで運用する方法をわかりやすく共有します。
エックスサーバーのサブドメイン構造
エックスサーバーでサブドメイン(例:sub.example.com
)を作成する際、
メインドメインのドキュメントルートが、/example.com/public_html/
である場合、サブドメインのドキュメントルートは、以下のように作られます。
/example.com/public_html/sub.example.com/
Laravelをそのまま配置すると危険
例えば、以下のようにサブドメイン直下にLaravel本体を配置すると、以下のようになります。
/example.com/public_html/(メインドメインのドキュメントルート)
/example.com/public_html/index.html
/example.com/public_html/sub.example.com/
├-app
├-bootstrap
├-config
├-database
├-public
├-resources
├-routes
├-storage
├-tests
├-vendor
├-.env
└-artisan
危険な理由
つまり、メインドメインのサブディレクトリとしてもアクセス出来てしまうからです。
以下の例では、laravelの環境設定ファイル.env
の内容を表示出来てしまい、DBのパスワード等の漏洩につながります。
https://example.com/sub.example.com/.env
安全にLaravelをサブドメインで運用する方法
1. Laravel本体をドキュメントルートより上のディレクトリに配置
Laravel本体を以下のように、ドキュメントルート(public_html) の上のディレクトリに配置します。
以下は、/example.com/
配下にlaravel
というディレクトリを作成し、その中にサブドメインのディレクトリsub.example.com
を作成した例です。
/example.com/public_html/(メインドメインのドキュメントルート)
/example.com/laravel/sub.example.com/
├-app
├-bootstrap
├-config
├-database
├-public
├-resources
├-routes
├-storage
├-tests
├-vendor
├-.env
└-artisan
2. Laravelのpublicディレクトリをドキュメントルート配下のサブドメインディレクトリと紐付ける
https://sub.example.com
にアクセスした際には、/example.com/public_html/sub.example.com
配下が読み込まれる必要があります。
そのため、Laravelの public ディレクトリをサブドメインのディレクトリへシンボリックリンクを貼ります。
以下のコマンドを実行します。
cd $HOME/example.com/public_html
ln -s $HOME/example.com/laravel/sub.example.com/public sub.example.com
その場でls -la
コマンドを実行すると、以下のように表示され、sub.example.com -> /home/wpxxxxx/example.com/laravel/sub.example.com/public
※ちなみに、SFTPツールで/example.com/public_html
配下を確認してもsub.example.com
のディレクトリの実体は存在しませんので、あわてないで下さいね(笑)
これで、無事にhttps://sub.example.com
にアクセス出来るようになりました。
さいごに
この方法で、Laravel本体を自由に好きなディレクトリに配置出来ることが分かりました。
今回は、エックスサーバーでの例で書きましたが、どのようなサーバーでも自由にLaravelを配置出来るので、複数のプロジェクトを配置するようなサーバー構成の場合、管理もしやすくなると思います。