gpt4 book ai didi

amazon-web-services - AWS EB + Nginx,更新 access.log 格式或创建新日志

转载 作者:行者123 更新时间:2023-12-02 02:54:01 24 4
gpt4 key购买 nike

我正在使用在 64 位 Amazon Linux/4.5.0 和 Nginx 上运行的配置 Node.js 在 AWS 的 Elastic Beanstalk 上运行应用程序。

我想将请求 header “X-My-Header”作为字段添加到 access.log。除此之外,我将使用复合默认 nginx 日志 + 我的 header 创建一个新的日志文件。我发现了几个专门关于使用 nginx 进行日志记录的类似问题,但是 EB 方面抛出了一个额外的曲线球,说明如何通过/.ebextensions 配置文件更新 nginx 配置。

我已经创建了一个日志文件,但它没有填充任何东西。我也尝试过只更新 access.log 文件,但这似乎也没有发生。我看到其他人添加 header 会使用“$http_”格式,看起来“X-Header-Example”的http请求 header 被格式化为“$http_header_example”(参见nginx复合默认中的“$http_user_agent”) ,虽然不想在假设上浪费时间,但请注意,我添加了“$http_x-my-header”和“$http_x_my_header”。

尝试 1:更新现有的 access.log 格式

files:
/etc/nginx/conf.d/01_proxy.conf:
owner: root
group: root
content: |
log_format my_log_format '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" - "$http_x_my_header" - "$http_x-my-header"';
access_log /var/log/nginx/access.log my_log_format;

结果:access.log 不包含任何其他字段。它甚至没有空 "" s,或 - .

尝试 2:创建一个新的日志文件
files:
/etc/nginx/conf.d/01_proxy.conf:
owner: root
group: root
content: |
log_format my_log_format '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" - "$http_x_my_header" - "$http_x-my-header"';
access_log /var/log/nginx/new_log.log my_log_format;

结果:new_log.log 现在出现在 var/log/nginx 中当我从 EB dashbaord 导出日志时。然而,它完全是空的。

我读了一些其他类似的问题,提到删除文件和重新启动服务器有时会有所帮助。我尝试通过EB仪表板重新启动应用程序甚至完全重建环境,都没有导致不同的结果。

我的解决方案主要基于 this medium article ,第 2.1 节。但是,当我尝试添加 container_command 时到我的 .config 文件,我的整个环境停止工作。我不得不恢复到不同的部署,然后重建环境以使其再次运行。

有小费吗?

我的目标是将此请求 header 与传入的请求相关联。理想情况下,我可以更新现有的默认 access.log。我将解决一个单独的文件。或者,如果您对我如何能够访问此信息有任何其他建议,我会全力以赴!谢谢。

编辑一个新的尝试:

Here它表明您可以完全替换默认的 nginx.config,所以我尝试删除我的其他文件,而是从 medium article 复制/粘贴默认值。从之前变成 /.ebextensions/nginx/nginx.config文件,除了在那里添加我的更改。我更新了 log_format main包括我的 "$http_x_my_header"值。

不幸的是,部署失败并显示以下消息:

The configuration file .ebextensions/nginx/nginx.config in application version contains invalid YAML or JSON. YAML exception: Invalid Yaml: expected '', but found Scalar in "", line 7, column 1: include /usr/share/nginx/modules ... ^ , JSON exception: Invalid JSON: Unexpected character (u) at position 0.. Update the configuration file.



违规行是 include /usr/share/nginx/modules ,它在媒体文章提供的默认设置中存在并正常工作。

我希望这将是一个肮脏的修复,我至少可以从中得到一些结果,但唉,它似乎还有另一个障碍。

最佳答案

我已经通过我自己在类似问题中的回答回答了这个问题:

AWS EB + nginx: Update access.log format to obfuscate sensitive get request parameters

简而言之:对于 Node AWS EB 环境,nginx 配置的服务器指令存在于自动生成的 00_elastic_beanstalk_proxy.conf 中。文件。在这里,他们打电话access_log /var/log/nginx/access.log main ,因此添加尝试更改 access_log 的 ebextension 配置会被覆盖。

我的解决方案是双重的:通过上传基于默认值的自定义 nginx.conf 覆盖主 log_format(AWS 说你可以这样做,但建议你通过拉取默认创建的那个,并在更新版本时重新检查它环境的图像),我还必须对自动生成的文件执行相同的操作,以执行一些设置我想要记录的新变量的逻辑。

有关更多详细信息,请参阅上面链接的答案,其中包含有关该过程的更多信息。

关于amazon-web-services - AWS EB + Nginx,更新 access.log 格式或创建新日志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50472459/

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