我正在尝试在java Spring Boot 2.4.5中配置Jetty 9.4.39.v20210325以接受代理协议V2流量。我想在spring配置类中以编程方式完成这项工作。这是我在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(,并且平衡器已启用代理协议V2流量。
当我用代理协议流量激活服务中的一个端点时,我得到了这个响应:
Bad Message 400
reason: Illegal character CNTL=0x0
有人知道我如何让我的服务接受这个代理协议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;
}
在这里,我得到了活动的服务器连接器,并将其更改为还包含一个ProxyConnectionFactory,它允许Jetty接受代理协议流量。