You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何限制Laravel API直接访问,仅允许通过Kong API网关调用

实现Laravel API仅允许通过Kong网关访问

要确保Laravel API只能通过Kong网关访问,直接访问原地址返回404,可以通过验证专属请求头的方式实现,以下是具体步骤:

1. 给Kong配置自定义请求头

在Kong的Service或Route配置中,添加一个自定义请求头(比如X-Kong-Access-Token),并设置一个仅你知晓的密钥值。所有经过Kong转发的请求都会自动带上这个头,用于后续合法性验证。

  • 可通过Kong Admin API配置,或在Kong Dashboard中给目标Route添加request-transformer插件,设置添加请求头的规则。

2. 创建Laravel验证中间件

生成专门验证Kong请求的中间件:

php artisan make:middleware VerifyKongProxy

编辑生成的app/Http/Middleware/VerifyKongProxy.php文件,在handle方法中验证请求头:

<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;

class VerifyKongProxy
{
    public function handle(Request $request, Closure $next): Response
    {
        $validToken = env('KONG_ACCESS_TOKEN');
        $requestToken = $request->header('X-Kong-Access-Token');

        // 无合法头则返回404
        if (empty($requestToken) || $requestToken !== $validToken) {
            abort(404, 'Not Found');
        }

        return $next($request);
    }
}

3. 添加环境变量配置

在.env文件中添加Kong密钥的配置项:

KONG_ACCESS_TOKEN=your-unique-secret-key

替换your-unique-secret-key为你在Kong中设置的密钥值。

4. 注册并应用中间件

打开app/Http/Kernel.php,在$routeMiddleware数组中注册中间件:

protected $routeMiddleware = [
    // ... 其他已有的中间件
    'kong.proxy' => \App\Http\Middleware\VerifyKongProxy::class,
];

在routes/api.php中,将需要保护的API路由组绑定这个中间件:

Route::prefix('v1')->middleware('kong.proxy')->group(function () {
    Route::get('/categories', [CategoryController::class, 'index']);
    // 其他需要限制访问的API路由
});

5. 可选:服务器层拦截(Nginx)

如果Laravel部署在Nginx上,可直接在Nginx配置中拦截未携带合法Kong头的请求,无需经过Laravel程序,性能更优:

location /api {
    if ($http_x_kong_access_token != "your-unique-secret-key") {
        return 404;
    }

    # 保留原有的Laravel Nginx配置
    try_files $uri $uri/ /index.php?$query_string;
}

内容的提问来源于stack exchange,提问作者sushant

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 05:57:21