我正在使用运行在 64 位 Amazon Linux/4.5.0 上的配置 Node.js 和 Nginx 在 AWS 的 Elastic Beanstalk 上运行应用程序。
我想将请求标头“X-My-Header”作为字段添加到 access.log。除此之外,我会使用复合默认 nginx 日志 + 我的标头创建一个新的日志文件。我发现了几个专门关于使用 nginx 进行日志记录的类似问题,但是 EB 方面抛出了一个额外的曲线球,说明如何通过 /.ebextensions 配置文件更新 nginx 配置。
我已经创建了一个日志文件,但它没有填充任何内容。我也尝试更新 access.log 文件,但这似乎也没有发生。我看到其他人添加标头将使用格式“$http_”,并且似乎“X-Header-Example”的 http 请求标头被格式化为“$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 仪表板导出日志时。然而,它完全是空的。
我读过一些其他类似的问题,提到删除文件和重新启动服务器有时会有所帮助。我尝试重新启动应用程序,甚至通过 EB 仪表板完全重建环境,都没有导致不同的结果。
我的解决方案主要基于这篇中等文章,第 2.1 节。但是,当我尝试将 .config 添加container_command
到我的 .config 文件时,我的整个环境停止工作。我不得不恢复到不同的部署,然后重建环境以使其再次运行。
有小费吗?
我的目标是将此请求标头与传入的请求相关联。理想情况下,我可以更新现有的默认 access.log。我将解决一个单独的文件。或者,如果您对我如何能够访问此信息有任何其他建议,我会全力以赴!谢谢。
编辑一个新的尝试:
在这里它表明你可以完全替换默认的 nginx.config,所以我尝试删除我的其他文件,而是从之前的媒体文章中复制/粘贴默认值到一个/.ebextensions/nginx/nginx.config
文件中,除了在那里添加我的更改。我更新log_format main
以包括我的"$http_x_my_header"
价值观。
不幸的是,部署失败并显示以下消息:
应用程序版本中的配置文件 .ebextensions/nginx/nginx.config 包含无效的 YAML 或 JSON。YAML 异常:无效的 Yaml:预期的 '',但在“”,第 7 行,第 1 列中找到标量:包括 /usr/share/nginx/modules ... ^,JSON 异常:无效的 JSON:位置上的意外字符 (u) 0..更新配置文件。
有问题的行是include /usr/share/nginx/modules
,它在中篇文章提供的默认值中存在并且工作正常。
我希望这将是一个肮脏的修复,我至少可以从中获得一些结果,但是唉,它似乎还有另一个障碍。