【Laravel】リバースプロキシ下でassetヘルパを使うには?違うアドレスが返されるときの対処法

laravel Laravel

リバースプロキシ環境ではassetヘルパーが正しいパスを返してくれないことがあります。リバースプロキシ環境下でもassetヘルパー関数が正しいアドレスを返すようにする方法を紹介します。

スポンサーリンク

リバースプロキシ下では正しいアドレスを返してくれない!

assetヘルパーはアセットへのフルパスを返してくれるヘルパー関数です。おもにbladeテンプレート内でjsやcssを読み込むのに使用されます。

しかし、リバースプロキシ下では、assetヘルパーが正しいアドレスを返してくれないことがありす。

たとえば、bladeでasset("/js/main.js")としている状態でローカルサーバー(http://localhost:8080)を立ち上げたときのことを考えてみましょう。

assetヘルパーはLaravelがホスティングされているURLを自動的に認識し、アセットへのフルパスを返してくれます。今回の例ではhttp://localhost:8080でホスティングされているため、assetヘルパーはhttp://localhost:8080/js/main.jsと出力することになります。想定通りの挙動です。

しかし、これをそのままリバースプロキシで外部公開してしまったらどうでしょうか。

例えば、https://hogehoge.comへホスティングしてしまうと、本来読み込まれるはずのjsのフルパスはhttps://hogehoge.com/js/main.jsとなるはずです。しかし、ローカルサーバーで動作しているLaravelは、アクセスがリバースプロキシ経由であるかどうかは認識できませんので、ローカル環境同様、http://localhost:8080/js/main.jsを返してしまいます。結果、アセットが正しく読み込まれないという問題が起こってしまうのです。

スポンサーリンク

.envにASSET_URLを追加して解決!

こういうときは.envファイルにASSET_URLを追加します。

.envにASSET_URLが設定されていると、assetヘルパーは設定されたURLをもとにアセットへのフルパスを返してくれるようになります。

ASSET_URL=https://hogehoge.com/fuga
{{asset("/js/main.js")}}
↓
https://hogehoge.com/fuga/js/main.jsと返すようになる

リバースプロキシで公開したいときは、ASSET_URLに公開するURLを指定しておきます。すると正しいフルパスが出力されるようになり、リバースプロキシ下でも正しくリソースが読み込まれるようになります。

まとめ

リバースプロキシ下でassetヘルパーが正しく動作しないときの解決法を紹介しました。

なお、サブディレクトリ公開やバーチャルホストでの公開時は、Laravelは自動的に公開されているURLを認識してくれますので、当記事での方法は不要です。リバースプロキシでローカルサーバーのLaravelを公開したいとき、ご参考にしていただければ幸いです。

コメント

タイトルとURLをコピーしました