当前位置: 首页 > 知识库问答 >
问题:

如何将x-forwarded-for字段添加到nginx入口控制器的访问日志中?

蒙弘图
2023-03-14

我在gke上使用nginx入口控制器,默认情况下,我的访问日志是这样的:

“10.123.0.20-[10.123.0.20]-[22/Apr/2019:18:47:59 0000]“GET/sdflksdf/sdfsdf HTTP/2.0”404 0“-”Mozilla/5.0(Macintosh;Intel Mac OS X 10_14_2)AppleWebKit/538.12(KHTML,像Gecko)Chrome/73.0.3683.100 Safari/537.36”26 0.002[默认-blah-80]10.44.0.26:80 0.001 404 SKJF0S93JF0 WS93JFSIJF3S3FJS3i

我想在访问日志中添加x-forwarded-for头。如果可能的话,我希望在当前日志行的末尾添加该字段。或者在日志行的开头也可以。

我正在查看他们的文档,不清楚如何将x-forwarded-for添加到访问日志中:https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/log-format/

共有2个答案

姚晋
2023-03-14

通过设置controller.service,从helm official repo安装nginx Ingres。外部交通政策(externalTrafficPolicy)到本地。

helm install nginx-ingress stable/nginx-ingress --set rbac.create=true --set controller.service.externalTrafficPolicy=Local
容鸿畴
2023-03-14

您应该使用ConfigMap自定义NGINX配置:

ConfigMaps允许您将配置工件与图像内容解耦,以保持容器化应用程序的可移植性。

ConfigMap API资源将配置数据存储为键值对。这些数据提供了nginx控制器的系统组件配置。

要配置自定义日志,需要使用上游日志格式键。

例如。:

创建以下配置映射:

apiVersion: v1
data:
  log-format-upstream: '$remote_addr - $request_id - [$proxy_add_x_forwarded_for] - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" $request_length $request_time [$proxy_upstream_name] $upstream_addr $upstream_response_length $upstream_response_time $upstream_status'
kind: ConfigMap
metadata:
  name: nginx-ingress-config

并确保您正在使用configmap=$(POD\u名称空间)/nginx-ingres-config作为nginx-ingres控制器的命令。

 类似资料:
  • 的X-Forwarded-For(XFF)报头是用于通过 HTTP 代理或负载平衡器识别连接到 web 服务器的客户端的发起 IP 地址的事实上的标准报头。当客户端和服务器之间的流量被拦截时,服务器访问日志仅包含代理或负载均衡器的IP地址。要查看客户端的原始 IP 地址,X-Forwarded-For请使用请求标头。 此标题用于调试,统计和生成依赖于位置的内容,并且通过设计它可以显示隐私敏感信息,

  • 我想将由< code>nginx生成的日志推送到< code>influxdb。为了处理这个,我有一个代理,它可以格式化它,提取一些地理数据,产生geohash,等等.. 问题是和代理运行在单独的容器中, /code>是一个生产者,它只能写入文件系统,但 agent只能从网络读取(例如,一些tcp流、websocket或http,通常在webdev中完成) 我不想在容器之间共享access.log

  • null 我在TopMenuButtons中有一个按钮,它具有openAssisstantStage()方法,打开新的小阶段: 对于这个阶段,我还有FXML文件和控制器(AssisstantController)。只有2个按钮-第一个按钮应该打开前一个阶段和关闭电流,但第二个按钮也应该打开普雷沃阶段,关闭电流,也打开一个特定的标签在我的标签视图和做一些其他逻辑例如。获取实际localDate: 我

  • 使用命令: /usr/bin/journalctl-o short-f |ncat{some ip}{some port} 将日志输出转发到某个远程日志跟踪应用程序。 问题是,我在打印输出中缺少systemd单元/服务名称,因此很难判断哪个服务生成哪个日志行。 例如,这是一条nginx生产线: 6月25日07:51:09本地主机bash[497]:10.23.132.98---[25/Jun/20

  • 我怎么绕过这个?我需要以某种方式再次实现那个方法,但突然间我不能通过作为一个论点的阶段。

  • 我在我的Spring启动应用程序中使用了开放遥测java自动检测。有没有办法让应用程序日志成为创建的跨度的一部分? 我的自动配置设置如下: