在 Icecast 中添加自定义 Header 以注销

Adding Custom Header to Logout in Icecast

是否可以让 icecast 的日志输出从 header 中读取一个变量发送到服务器?目前我正在 Kuberenetes 中设置一个 icecast 服务器,我正在尝试将源 IP 保存到流中以分析日志数据。然而,即使在 kubernetes 方面采取了必要的步骤,我也没有看到 icecast 的日志有源 IP。我是如何嗅探传入请求的,我看到了:

X-Real-IP: 142.x.x.x
X-Forwarded-For: 142.x.x.x

随着 header 进入服务器。

是否可以通过某种方式将它们写入日志?

暂时没有。

我们计划在 2.5 版中支持反向代理。

我们目前的一般建议是不要反向代理 Icecast,因为除了丢失原始 IP 地址之外还有许多可能的问题。

只需将 Icecast 端口直接暴露给互联网,例如通过端口转发。

编辑: You can just declare protocol: TCP ports for your service. 也 "Proxy-mode: iptables"

如果您不介意稍微修改一下,您可以这样做。

克隆 source

在源文件中找到这些行,它们定义了记录为侦听器 ip 的内容:

./src/logging.c:159: client->con->ip,
./src/admin.c:700: xmlNewTextChild(node, NULL, XMLSTR(mode == OMODE_LEGACY ? "IP" : "ip"), XMLSTR(client->con->ip)); 

添加此代码段以定义新变量,这将设置为 X-Real-IP header 的值(如果存在)或客户端 IP(如果不存在):

const char *realip;
realip = httpp_getvar (client->parser, "x-real-ip");
if (realip == NULL)
  realip = client->con->ip;

更改前面提到的行以引用新变量:

./src/logging.c:163: realip,
./src/admin.c:700: xmlNewTextChild(node, NULL, XMLSTR(mode == OMODE_LEGACY ? "IP" : "ip"), XMLSTR(realip));

按照说明从源代码构建 Icecast