monicahq/laravel-cloudflare

将Cloudflare IP地址添加到Laravel的可信代理。

资助包维护!
asbiin

3.7.1 2024-03-30 09:59 UTC

README

将Cloudflare IP地址添加到Laravel的可信代理。

Latest Version Downloads Workflow Status Quality Gate Coverage Status

安装

  1. 使用composer安装包
composer require monicahq/laravel-cloudflare
  1. 配置中间件

在您的 bootstrap/app.php 文件中替换 TrustProxies 中间件

->withMiddleware(function (Middleware $middleware) {
    $middleware->replace(
        \Illuminate\Http\Middleware\TrustProxies::class,
        \Monicahq\Cloudflare\Http\Middleware\TrustProxies::class
    );
})

自定义代理回调

您可以通过调用 LaravelCloudflare::getProxiesUsing() 来定义自己的代理回调,以改变 LaravelCloudflare::getProxies() 方法的行为。此方法通常在您的 AppServiceProvider 类的 boot 方法中调用

use Illuminate\Support\ServiceProvider;
use Monicahq\Cloudflare\LaravelCloudflare;
use Monicahq\Cloudflare\Facades\CloudflareProxies;

class AppServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap any application services.
     */
    public function boot(): void
    {
        LaravelCloudflare::getProxiesUsing(fn() => CloudflareProxies::load());
    }
}

工作原理

中间件使用 Illuminate\Http\Middleware\TrustProxies 作为后端。

当检测到cloudflare ips时,它们被用作可信代理。

刷新缓存

此包检索Cloudflare的IP块,并将它们存储在缓存中。当请求到来时,中间件将从缓存中获取Cloudflare的IP块,并将它们作为可信代理加载。

您需要定期刷新cloudflare缓存,以确保始终有最新的代理。

使用 cloudflare:reload artisan命令刷新IP块

php artisan cloudflare:reload

建议:将重载命令添加到计划中

在您的 routes/console.php 文件中添加一个计划来刷新缓存,例如

use Illuminate\Support\Facades\Schedule;

Schedule::command('cloudflare:reload')->daily();

查看当前的Cloudflare IP块

您可以使用 cloudflare:view artisan命令查看缓存的IP块

php artisan cloudflare:view

选项:发布包配置文件

如果您想,您可以发布包配置文件到 config/laravelcloudflare.php

php artisan vendor:publish --provider="Monicahq\Cloudflare\TrustedProxyServiceProvider"

此文件包含一些配置,但通常您不需要更改它们。

为您包运行测试

在为您的包运行测试时,您通常不需要获取Cloudflare的代理地址。您可以通过在 .envphpunit.xml 文件中添加以下环境变量来禁用Laravel Cloudflare中间件

LARAVEL_CLOUDFLARE_ENABLED=false

兼容性

引用

此包受到了 lukasz-adamski/laravel-cloudflare 的启发,并从 ogunkarakus/laravel-cloudflare 分支而来。

许可证

作者: Alexis Saettler

该项目是 MonicaHQ 的一部分。

版权 © 2019–2024。

在MIT许可证下发布。 查看许可证