我正在尝试在 java Spring Boot 2.4.5 中配置 Jetty 9.4.39.v20210325 以接受代理协议(protocol) V2 流量。我想在 spring 配置类中以编程方式执行此操作。这是我根据this page底部的Proxy Protocol部分在SharedConfiguration.java
配置类中编写的方法.
@Bean
public ConfigurableServletWebServerFactory
jettyCustomizer() {
JettyServletWebServerFactory factory = new JettyServletWebServerFactory();
factory.addServerCustomizers(server -> {
ProxyConnectionFactory proxyConnectionFactory = new ProxyConnectionFactory();
ServerConnector serverConnector = new ServerConnector(server, proxyConnectionFactory);
server.addConnector(serverConnector);
});
return factory;
}
HTTP 流量来自 AWS EC2 网络负载均衡器 (NLB),并且该均衡器启用了代理协议(protocol) V2 流量。
当我使用代理协议(protocol)流量激活服务中的端点时,我收到此响应:
Bad Message 400
reason: Illegal character CNTL=0x0
有谁知道如何让我的服务接受此代理协议(protocol) V2 流量?我不确定我是否正确配置了 Jetty 来执行此操作。
谢谢!
最佳答案
后来我发现了我的配置问题,我添加了一个新的服务器连接器,而不是更改 Jetty 服务器中已有的连接器。
正确的做法是:
@Bean
public ConfigurableServletWebServerFactory jettyCustomizer() {
JettyServletWebServerFactory factory = new JettyServletWebServerFactory();
factory.addServerCustomizers(server -> {
ServerConnector serverConnector = (ServerConnector) server.getConnectors()[0];
serverConnector.addFirstConnectionFactory(new ProxyConnectionFactory());
});
return factory;
}
在这里,我获取 Activity 服务器连接器并将其更改为还包含一个 ProxyConnectionFactory,它允许 Jetty 接受代理协议(protocol)流量。
关于java - 在 Spring Boot 中使用 Jetty 接受代理协议(protocol) V2 流量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73225314/