在Spring Boot中使用Tomcat启用http2
Tomcat 8.5
,这是Spring Boot" title="Spring Boot">Spring Boot 1.4
(将于明天发布)supports中的默认设置http2
。
如何http2
在Spring Boot
应用程序中启用?
回答:
下面HTTP/2
是使用Spring Boot应用程序启用的最优雅,性能最佳的方法。
首先,如安迪·威尔金森(Andy Wilkinson)的回答中所述,您需要在Tomcat级别启用HTTP / 2:
@Beanpublic EmbeddedServletContainerCustomizer tomcatCustomizer() {
return (container) -> {
if (container instanceof TomcatEmbeddedServletContainerFactory) {
((TomcatEmbeddedServletContainerFactory) container)
.addConnectorCustomizers((connector) -> {
connector.addUpgradeProtocol(new Http2Protocol());
});
}
};
}
如果您不使用嵌入式Tomcat,则可以这样设置HTTP / 2侦听:
<Connector port="5080" protocol="HTTP/1.1" connectionTimeout="20000"> <UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" />
</Connector>
请记住,您需要Tomcat > = 8.5。
然后,您应该在Tomcat前面使用HAProxy
_(version > = 1.7)_来进行加密。
客户端将向HAProxy讲https,而HAProxy将根据客户端请求向后端讲明文HTTP / 1.1或HTTP / 2。不会有不必要的协议翻译。
匹配的HAProxy配置在这里:
# Create PEM: cat cert.crt cert.key ca.crt > /etc/ssl/certs/cert.pemglobal
tune.ssl.default-dh-param 2048
ssl-default-bind-options no-sslv3 no-tls-tickets force-tlsv12
ssl-default-bind-ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS
chroot /var/lib/haproxy
user haproxy
group haproxy
defaults
timeout connect 10000ms
timeout client 60000ms
timeout server 60000ms
frontend fe_https
mode tcp
rspadd Strict-Transport-Security:\ max-age=31536000;\ includeSubDomains;\ preload
rspadd X-Frame-Options:\ DENY
bind *:443 ssl crt /etc/ssl/certs/cert.pem alpn h2,http/1.1
default_backend be_http
backend be_http
mode tcp
server domain 127.0.0.1:8080
# compression algo gzip # does not work in mode "tcp"
# compression type text/html text/css text/javascript application/json
使用模式“ tcp”时,我遇到两个问题
- 压缩不起作用,因为它取决于模式http。所以后端必须照顾好它
- 后端看不到客户端的IP地址。可能我需要NAT。仍在调查中…
通常,由于haproxy代理了较低级别的tcp连接,因此无法访问任何http东西
以上是 在Spring Boot中使用Tomcat启用http2 的全部内容, 来源链接: utcz.com/qa/429693.html