Laravel 11でTrustProxiesミドルウェアを設定する方法
このような形でできるようになったみたいです!(2024/4/1追記)
->withMiddleware(function (Middleware $middleware) {
$middleware->trustProxies(at: '*');
GitHubで確認したところ、2/17のコミットでNuno Maduroさん、Taylor Otwellさんらによってそのあたり対応されたようです。
情報提供いただいた@cocolabo さん、ありがとうございます🙏
以下は開発版時点での執筆であり古い情報のため、読まなくても大丈夫です。
はじめに
Laravel 11のリリースと共に、多くの開発者が以前のバージョンで慣れ親しんだ設定やミドルウェアが見当たらないことに戸惑うかもしれません。特に、AWSのApplication Load Balancer(ALB)を利用してHTTPS通信を行う環境では、TrustProxiesミドルウェアの設定が欠かせません。
この記事では、Laravel 11でTrustProxiesミドルウェアをどのように設定し、セキュアな環境を維持するかについて、ステップバイステップで解説します。これは、Laravel 11がリリースされた後でも、必要な設定が見つからない場合に役立つ情報です。
TrustProxies
ミドルウェアの生成
Step1 : Laravel 11でプロジェクトを新規作成した際、以前のバージョンで見慣れたTrustProxiesミドルウェアはデフォルトでは含まれていません。そのため、最初のステップは、必要なミドルウェアを自分で生成することです。以下のコマンドを使用してミドルウェアを生成します。
php artisan make:middleware TrustProxies
TrustProxies
ミドルウェアの編集
Step2 : 生成したTrustProxiesミドルウェアには、信頼するプロキシを指定する$proxiesプロパティが含まれています。このプロパティを環境に合わせて設定しましょう。例として、すべてのプロキシを信頼する設定は以下の通りです。
<?php
namespace App\Http\Middleware;
use Illuminate\Http\Middleware\TrustProxies as Middleware;
use Illuminate\Http\Request;
class TrustProxies extends Middleware
{
/**
* The trusted proxies for this application.
*
* @var array<int, string>|string|null
*/
protected $proxies = '**';
/**
* The headers that should be used to detect proxies.
*
* @var int
*/
protected $headers =
Request::HEADER_X_FORWARDED_FOR |
Request::HEADER_X_FORWARDED_HOST |
Request::HEADER_X_FORWARDED_PORT |
Request::HEADER_X_FORWARDED_PROTO |
Request::HEADER_X_FORWARDED_AWS_ELB;
}
bootstrap/app.php
でミドルウェアを適用
Step3 : 次に、bootstrap/app.php ファイルを編集して、新しく生成したTrustProxiesミドルウェアをアプリケーションに適用します。
<?php
use Illuminate\Foundation\Application;
use Illuminate\Foundation\Configuration\Exceptions;
use Illuminate\Foundation\Configuration\Middleware;
return Application::configure(basePath: dirname(__DIR__))
->withRouting(
// ...その他のルーティング設定...
)
->withMiddleware(function (Middleware $middleware) {
// ここにミドルウェアを追加
$middleware->append(\App\Http\Middleware\TrustProxies::class);
})
// ...その他の設定...
->create();
終わりに
以上で、Laravel 11におけるTrustProxiesの設定は完了です。今回の例では、すべてのプロキシを信頼する設定を行いましたが、実際の運用環境では、信頼できるプロキシのIPアドレスや範囲を指定することを推奨します。
この記事が役立つことを願っていますが、疑問点やフィードバックがある場合は、ぜひコメントを残してください。皆さんの意見を参考に、記事を更新していきたいと思います。読者の皆様の成功を心から願っています。
Discussion
Middlewareを作らなくても以下のようにすれば設定できますよ
この方の記事にも載ってますね
@cocolabo さん
ホントですね!GitHub上からもNuno Maduroさん、Taylor Otwellさんらによって2/17のコミットにてその修正がなされていることが確認できました!情報提供いただきありがとうございます!感謝します!
と記載したのですが、執筆時点では開発版のためこの機能無く、Laravel11本リリースまでには追加されたようですね!良かったです🎉
記事はメンテしておこうと思います!