🐘

Laravel 11でTrustProxiesミドルウェアを設定する方法

2024/02/25に公開
2

このような形でできるようになったみたいです!(2024/4/1追記)

 ->withMiddleware(function (Middleware $middleware) {
        $middleware->trustProxies(at: '*');

GitHubで確認したところ、2/17のコミットでNuno Maduroさん、Taylor Otwellさんらによってそのあたり対応されたようです。
https://github.com/laravel/framework/commit/296977255e9295cc1c15c85e40d9a71e127a1895

情報提供いただいた@cocolabo さん、ありがとうございます🙏

以下は開発版時点での執筆であり古い情報のため、読まなくても大丈夫です。


はじめに

Laravel 11のリリースと共に、多くの開発者が以前のバージョンで慣れ親しんだ設定やミドルウェアが見当たらないことに戸惑うかもしれません。特に、AWSのApplication Load Balancer(ALB)を利用してHTTPS通信を行う環境では、TrustProxiesミドルウェアの設定が欠かせません。

この記事では、Laravel 11でTrustProxiesミドルウェアをどのように設定し、セキュアな環境を維持するかについて、ステップバイステップで解説します。これは、Laravel 11がリリースされた後でも、必要な設定が見つからない場合に役立つ情報です。

Step1 : TrustProxies ミドルウェアの生成

Laravel 11でプロジェクトを新規作成した際、以前のバージョンで見慣れたTrustProxiesミドルウェアはデフォルトでは含まれていません。そのため、最初のステップは、必要なミドルウェアを自分で生成することです。以下のコマンドを使用してミドルウェアを生成します。

php artisan make:middleware TrustProxies

Step2 : TrustProxies ミドルウェアの編集

生成した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;
}

Step3 : bootstrap/app.php でミドルウェアを適用

次に、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

cocolabococolabo

Middlewareを作らなくても以下のようにすれば設定できますよ

 ->withMiddleware(function (Middleware $middleware) {
        $middleware->trustProxies(at: '*');

この方の記事にも載ってますね

マイキー in 株式会社クルービットマイキー in 株式会社クルービット

@cocolabo さん

ホントですね!GitHub上からもNuno Maduroさん、Taylor Otwellさんらによって2/17のコミットにてその修正がなされていることが確認できました!情報提供いただきありがとうございます!感謝します!
https://github.com/laravel/framework/commit/296977255e9295cc1c15c85e40d9a71e127a1895

これは、Laravel 11がリリースされた後でも、必要な設定が見つからない場合に役立つ情報です。

と記載したのですが、執筆時点では開発版のためこの機能無く、Laravel11本リリースまでには追加されたようですね!良かったです🎉

記事はメンテしておこうと思います!