gpt4 book ai didi

php - 如何将 Laravel 用户名添加到 nginx 的访问日志中?

转载 作者:行者123 更新时间:2023-12-04 02:10:06 26 4
gpt4 key购买 nike

有人知道如何将我用户的 Laravel 用户名包含到访问日志中吗?我在 Ubuntu 16.04 上使用 Laravel 5.2 和 Nginx。

我知道如何将数据添加到 Nginx 的访问日志中,但是,如何将信息(在本例中为用户名)从 Laravel 传递到 Nginx 以便将该信息添加到访问日志中?

谢谢

最佳答案

我一直在做更多的研究,并在这里和那里找到了一些小片段来实现实际的解决方案。

描述

我想到的解决方案是使用中间件设置包含用户名的 header ,然后创建包含该 header 内容的日志格式,然后清除该 header 以使其不显示给用户。
注意:此代码使用的是 Laravel 5.2,您可能需要针对 Laravel 5.3 或其他版本进行一些调整。

设置标题

在 Laravel 中创建一个在 header 中设置用户名的中间件,如下所示:

<?php 
namespace App\Http\Middleware;

use Closure;
use Illuminate\Contracts\Auth\Guard;
use Illuminate\Http\Request;

class UserHeader
{
protected $auth;

public function __construct(Guard $auth)
{
$this->auth = $auth;
}

public function handle(Request $request, Closure $next)
{
$response = $next($request);
$user = $this->auth->user();
if ($user) {
$response->headers->set('X-Username', $user->name);
} else {
$response->headers->set('X-Username', 'Anonymous');
}
return $response;
}
}

然后在app/Http/Kernel.php中注册中间件

protected $middleware = [
// ....
UserHeader::class,
];

这会在响应中添加这样的 header :

X-Username: Administrator

使用标题

现在,我们在 Nginx 中处理这个 header 。
我们创建了一个日志格式来使用该变量,我们在 /etc/nginx/nginx.conf

的格式中包含了 $sent_http_x_username
log_format with_user_combined '$remote_addr - $sent_http_x_username [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" '
'$pipe';

然后我们在访问日志 /etc/nginx/sites-enabled/mysite.com 中使用该格式:

access_log /var/log/nginx/access-mysite.com.log with_user_combined;

可选

然后,我们清除 header ,这样它就不会传递给用户:

more_clear_headers 'X-Username';

只要您不决定将该信息插入逻辑的任何部分,将 header 留在那里并不代表任何安全问题。


这也可以应用于其他类型的数据,这些数据可能对包含在我们的日志中很有用。

我希望这对其他人有帮助。

关于php - 如何将 Laravel 用户名添加到 nginx 的访问日志中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39475430/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com