问题标签 [proxy-protocol]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
814 浏览

nginx - 将 http2_push 与 nginX 与 HAProxy 结合使用不起作用

当在 HaProxy 后面配置 nginX 时,我无法让 HTTP/2 推送工作。但是,当 Web 浏览器直接点击 nginX 时,它确实有效。

已经做了很多研究,但没有找到任何提示。希望有人知道我做错了什么。请参阅下面的配置和进一步的观察。

配置

相关的 HaProxy(版本 1.8.7)配置由以下给出:

而相关的nginX(1.14.0版本)配置如下:

观察

  • 在 nginx 日志中,我可以验证访问内容的两种方式都使用 HTTP2。
  • 当我使用 Chrome 访问该页面时,我可以看到只有在直接访问 nginX 时才使用push

2018 年 5 月 9 日更新 仍未解决。但人们似乎同意这是一个错误。我在他们的问题跟踪器上打开了一个问题:https ://trac.nginx.org/nginx/ticket/1549#ticket

2018 年 4 月 26 日更新

看来问题不仅仅是 http2 推送。如果我记录$schemenginX 变量,它总是设置为http. 从 http2 访问 http 时都如此。

所以这显然是个问题。但是我不确定如何解决这个问题。Haproxy 工作在 tcp 模式;因此可能不会做错任何事。

一个相关(但可能已过时)的 Stack Overflow 主题是负载均衡器后面的 nginx $scheme 变量。但是那个答案无助于解决这个问题!

2018 年 4 月 25 日更新

还是行不通。但更近了一步。在两者上运行 nghttp2,结果如下所示。

两者似乎都嵌入了 /image.jpg 资源。但是通过 haproxy 的方案设置为 http;而不是https。正如在这个差异中看到的那样:

nghttp 请求的差异

我假设因此;Chrome 不会使用这个推送的资源。但是我不确定是什么原因造成的!

有人有线索吗?


两个命令的完整输出:

0 投票
2 回答
1218 浏览

nginx - 使用 proxy_protocol 时在 nginx 中阻止 CIDR 范围的更好方法是什么?

我在 AWS 的 ELB 后面有一小部分 nginx 实例。这个 ELB 是面向互联网的,并且使用 PROXY 协议,而不是 HTTP。

这是我的相关部分main.vhost

我正在尝试使用中的deny指令ngx_http_access_module来防止访问一系列 CIDR 块。

EG:在.confnginx 启动时加载的文件中:

并且在/etc/nginx/ip_block/目录中至少有一个文件:

但是,似乎 nginx 的deny指令只对$remote_addr变量有效,对变量无效$proxy_protocol_addr。这实际上意味着我不能同时使用deny指令和proxy_protocol在一起。

似乎该ngx_stream_realip_module模块可用于将值调整为$remote_addr$proxy_protocol_addr但是,我可用的 nginx 构建当前未配置--with-stream_realip_module构建标志。我目前正在运行1.10.3,但看起来该with-stream_realip_module标志是在构建中引入的1.11.4https://github.com/nginx/nginx/commit/fe2774a9d689fa1bf201dd0e89449e3d9e4ad926

选项 1:从源代码构建具有我需要编译的功能的 nginx 版本。

在查看deny指令的文档时,我发现了这个注释:

来自:https ://nginx.org/en/docs/http/ngx_http_access_module.html

这让我想知道是否有更好的方法来实现阻止 CIDR 范围的目标,该范围可能适用于我目前拥有的 nginx 二进制文件。

我可以尝试这样的事情:

文件conf/some_cidr_ranges_to_block.conf如下所示:

然后在我的服务器指令中,我可以执行以下操作:

选项 2:尝试使用geo指令和自定义 IP 范围 -> “国家代码”数据库来阻止流量。

我的问题:

0 投票
1 回答
5691 浏览

haproxy - 如何使用 HAproxy 剥离代理协议?

考虑以下情况:

后端服务器分别在端口 5443 和 443 上本地运行 HAproxy 和 Apache httpd。

我的本地网络服务器不支持 PROXY 协议。因此,我希望 HAproxy 从 3rd 方服务中捕获 PROXY 协议,并以 HTTPS 或简单的 TCP 直通方式将数据传递到本地网络服务器。

在 HTTPS 的情况下,我想它应该使用正确的 SSL 证书来操纵 HTTP 数据包,以在X-Forwarded-ForHTTP 标头中添加原始发件人 IP(应该由 PROXY 协议提供)。

但是,如果您是 HAproxy 的新手,那么HAproxy 的文档会很糟糕,而且我找不到解释如何执行此操作的示例。我知道它必须是可能的,因为 HAproxy 被列为“代理协议就绪软件”,但是如何?

0 投票
1 回答
391 浏览

nginx - 在启用 Proxy_Protocol 的情况下将 NGINX 流量代理到辅助代理

我正在尝试路由请求,以便那些需要 websockets 的请求将路由到一个长期存在的 nginx 进程,而所有其他请求将转到处理所有其他流量的通用反向代理。这些 nginx 进程存在于我们的 AWS 云中,位于已配置为使用代理协议的 ELB 后面。请注意,所有这些都适用于我们当前的设置,该设置仅使用一个配置为使用 proxy_protocol 的 nginx 进程。

对此设置的更改如下:

第一个处理所有入口的 nginx 服务器使用 proxy_protocol 并将请求转发到本地的 websocket 或非 websocket nginx 服务器:

当任何非 websocket 请求发送到 localhost:8082 时,我得到一个空回复。如果我从第一台服务器中删除 proxy_protocol,我会得到预期的响应。显然,我需要 proxy_protocol 来支持来自我们 ELB 的入口,所以删除它不是一个选项。但是,我想知道我缺少哪些正确路由流量的部分——我还想知道为什么将请求从启用了 proxy_protocol 的服务器本地代理到另一个 nginx 进程(不管第二个进程是否使用 proxy_protocol)失败。

作为参考,这个二级nginx进程的基本配置如下:

0 投票
1 回答
1078 浏览

kubernetes - Istio 是否支持代理协议?

Istio 是否支持代理协议?

我使用 TCP 转发和代理协议(“send-proxy”标志)在 haproxy 后面设置了一个网关,但它不起作用。

我知道 Envoy 支持它,但似乎 Istio 不支持。

如果它不支持它,是否有另一种方法来检索源 IP?

谢谢你的帮助。

0 投票
3 回答
1182 浏览

python-3.x - 来自 Python 的 AWS 网络负载均衡器后面的客户端 IP

在网络负载均衡器后面运行套接字服务器时,实例由 IP 指定,...

... 然后...

打印似乎是网络负载均衡器本身的私有 IP。

如何确定原始客户端 IP?

0 投票
1 回答
274 浏览

spring-boot - Kubernetes:Tomcat在启用代理协议时抛出异常

我现在有点迷路了。我建立了一个 Kubernetes 集群,部署了一个 Spring Boot API 和一个运行良好的 LoadBalancer。现在我想在 LoadBalancer 上启用代理协议以保留真实的客户端 IP,但是一旦我这样做了,我的 Spring Boot API 总是返回一个400 Bad RequestIllegalArgumentException抛出一个。

这是简短的堆栈跟踪(我屏蔽了 IP 地址):

我正在使用 Hetzner 的hcloud-cloud-controller-manager

这是我的负载平衡器:

这是我的弹簧配置:

您可能已经注意到,我已经尝试基于此问题启用前向标头。

谢谢你的帮助!

0 投票
1 回答
364 浏览

netty - 由于没有 PSH 标志,AWS 的代理协议 v2 中断应用程序

我有一个使用 Netty 构建的网络应用程序。该应用程序位于 Amazon 网络负载均衡器之后。

我现在希望能够检索原始客户端 IP 地址,因此我打开了网络负载平衡器上的代理协议 v2 设置。

不幸的是,这样做会破坏应用程序。

可以使用 nc 或 telnet 之类的方式通过终端与应用程序进行交互。

在连接到应用程序时,用户通常会收到一条欢迎消息,然后提示您输入查询以与应用程序交互。

当代理协议 v2 打开时,在连接时,欢迎消息不再写入客户端,而是客户端看到如下内容:

捕获网络数据包我注意到代理协议 v2 关闭时(应用程序工作正常)和它打开时(应用程序工作不正常)之间的区别

当 Proxy 协议 v2 关闭时,数据包交互可以总结如下:

而当Proxy协议v2开启时,包交互可以总结如下:

从上图可以看出,当Proxy Protocol v2开启时,包交换在第三次交换处停止,服务器从不发送第4次包交换,其中包含[PSH, ACK]Proxy Protocol v2关闭时的信息。

知道为什么会这样吗?为什么[PSH, ACK]开启代理协议 v2 时,永远不会发送带有标志的数据包?以及有关如何解决此问题的任何提示?

0 投票
0 回答
290 浏览

azure - Azure 逻辑应用 SFTP (SSH) 连接器 - 启用代理协议

我们有一个 Azure Logic App,它通过 SSH 连接到外部 SFTP 服务器。几天前,由于“网关超时”,逻辑应用连接器开始出现故障:

我们发现外部合作伙伴在他们这边启用了代理协议,这就是 Azure SFTP SSH 连接器失败的原因。

SFTP-SSH 连接器是否支持代理协议,如果支持,如何配置?

不幸的是,我没有在文档中找到任何信息:

0 投票
0 回答
10 浏览

load-balancing - vSphere Edge 网关负载平衡器池的代理协议

有没有办法让 vSphere Edge 网关负载均衡器获取请求的源 IP 并将其包装到代理协议 TCP 标头中,以便在不使用 vSphere 的“透明负载均衡”/DSR 功能的情况下保留负载均衡器池/目标的 IP ?

我发现定义“应用程序规则”的可能性,然后可以将其添加到虚拟服务器并由实际的 HAProxy 片段组成,但是看起来(并在文档中指出)这些片段仅插入在前端级别HAProxy 配置。
不幸的是,我还没有找到通过前端指令配置代理协议注入的可能性,我所发现的只是在后端块中为服务器使用 send-proxy-v2 指令,或者在 default-server 指令中使用它在默认值/后端块中。

有什么方法可以配置 vSphere EGW 为其后端服务器使用代理协议,或者通过应用程序规则之外的另一个配置选项,或者通过一些允许从前端配置 send-proxy-v2 指令的 HAProxy 配置技巧?

有问题的 vSphere 版本为 6.7U3