编程

Laravel 应用中管理 Proxy Trust

360 2025-01-28 01:54:00

当在负载均衡器或反向代理后面部署 Laravel 应用时,TrustProxies 中间件的正确配置可确保正确处理客户端信息和 HTTPS 检测。

use Illuminate\Http\Request;
 
// Basic proxy configuration
->withMiddleware(function (Middleware $middleware) {
    $middleware->trustProxies(at: [
        '10.0.0.0/8',
        '172.16.0.0/12'
    ]);
});

以下是一个为各种云环境配置应用的示例:

<?php
 
use Illuminate\Http\Request;
 
->withMiddleware(function (Middleware $middleware) {
    // Cloud environment detection
    $environment = env('APP_ENV');
 
    switch ($environment) {
        case 'production':
            // AWS ELB Configuration
            $middleware->trustProxies(
                at: '*',
                headers: Request::HEADER_X_FORWARDED_AWS_ELB
            );
            break;
 
        case 'staging':
            // Digital Ocean Configuration
            $middleware->trustProxies(
                at: '*',
                headers: Request::HEADER_X_FORWARDED_FOR |
                    Request::HEADER_X_FORWARDED_HOST |
                    Request::HEADER_X_FORWARDED_PORT |
                    Request::HEADER_X_FORWARDED_PROTO
            );
            break;
 
        default:
            // Local/Development Configuration
            $middleware->trustProxies(
                at: ['127.0.0.1', '::1'],
                headers: Request::HEADER_X_FORWARDED_FOR |
                    Request::HEADER_X_FORWARDED_PROTO
            );
    }
});

TrustProxies 中间件可确保应用在负载均衡器或反向代理后面操作时正确处理客户端信息。