问题标签 [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.
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 推送。如果我记录$scheme
nginX 变量,它总是设置为http
. 从 http2 访问 http 时都如此。
所以这显然是个问题。但是我不确定如何解决这个问题。Haproxy 工作在 tcp 模式;因此可能不会做错任何事。
一个相关(但可能已过时)的 Stack Overflow 主题是负载均衡器后面的 nginx $scheme 变量。但是那个答案无助于解决这个问题!
2018 年 4 月 25 日更新
还是行不通。但更近了一步。在两者上运行 nghttp2,结果如下所示。
两者似乎都嵌入了 /image.jpg 资源。但是通过 haproxy 的方案设置为 http;而不是https。正如在这个差异中看到的那样:
我假设因此;Chrome 不会使用这个推送的资源。但是我不确定是什么原因造成的!
有人有线索吗?
两个命令的完整输出:
和
nginx - 使用 proxy_protocol 时在 nginx 中阻止 CIDR 范围的更好方法是什么?
我在 AWS 的 ELB 后面有一小部分 nginx 实例。这个 ELB 是面向互联网的,并且使用 PROXY 协议,而不是 HTTP。
这是我的相关部分main.vhost
我正在尝试使用中的deny
指令ngx_http_access_module
来防止访问一系列 CIDR 块。
EG:在.conf
nginx 启动时加载的文件中:
并且在/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.4
(https://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 范围 -> “国家代码”数据库来阻止流量。
我的问题:
haproxy - 如何使用 HAproxy 剥离代理协议?
考虑以下情况:
后端服务器分别在端口 5443 和 443 上本地运行 HAproxy 和 Apache httpd。
我的本地网络服务器不支持 PROXY 协议。因此,我希望 HAproxy 从 3rd 方服务中捕获 PROXY 协议,并以 HTTPS 或简单的 TCP 直通方式将数据传递到本地网络服务器。
在 HTTPS 的情况下,我想它应该使用正确的 SSL 证书来操纵 HTTP 数据包,以在X-Forwarded-For
HTTP 标头中添加原始发件人 IP(应该由 PROXY 协议提供)。
但是,如果您是 HAproxy 的新手,那么HAproxy 的文档会很糟糕,而且我找不到解释如何执行此操作的示例。我知道它必须是可能的,因为 HAproxy 被列为“代理协议就绪软件”,但是如何?
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进程的基本配置如下:
kubernetes - Istio 是否支持代理协议?
Istio 是否支持代理协议?
我使用 TCP 转发和代理协议(“send-proxy”标志)在 haproxy 后面设置了一个网关,但它不起作用。
我知道 Envoy 支持它,但似乎 Istio 不支持。
如果它不支持它,是否有另一种方法来检索源 IP?
谢谢你的帮助。
python-3.x - 来自 Python 的 AWS 网络负载均衡器后面的客户端 IP
在网络负载均衡器后面运行套接字服务器时,实例由 IP 指定,...
... 然后...
打印似乎是网络负载均衡器本身的私有 IP。
如何确定原始客户端 IP?
spring-boot - Kubernetes:Tomcat在启用代理协议时抛出异常
我现在有点迷路了。我建立了一个 Kubernetes 集群,部署了一个 Spring Boot API 和一个运行良好的 LoadBalancer。现在我想在 LoadBalancer 上启用代理协议以保留真实的客户端 IP,但是一旦我这样做了,我的 Spring Boot API 总是返回一个400 Bad Request
并IllegalArgumentException
抛出一个。
这是简短的堆栈跟踪(我屏蔽了 IP 地址):
我正在使用 Hetzner 的hcloud-cloud-controller-manager。
这是我的负载平衡器:
这是我的弹簧配置:
您可能已经注意到,我已经尝试基于此问题启用前向标头。
谢谢你的帮助!
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 时,永远不会发送带有标志的数据包?以及有关如何解决此问题的任何提示?
azure - Azure 逻辑应用 SFTP (SSH) 连接器 - 启用代理协议
我们有一个 Azure Logic App,它通过 SSH 连接到外部 SFTP 服务器。几天前,由于“网关超时”,逻辑应用连接器开始出现故障:
我们发现外部合作伙伴在他们这边启用了代理协议,这就是 Azure SFTP SSH 连接器失败的原因。
SFTP-SSH 连接器是否支持代理协议,如果支持,如何配置?
不幸的是,我没有在文档中找到任何信息:
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