Spring Boot 3.5.3启用SSL Http/2、优化Tomcat和JVM节省内存提高吞吐量
开启HTTP/2必须开启SSL,否则浏览器可能会退回到HTTP/1.1,由于http2是并行处理请求,加载网站速度会快很多。
HTTP2有如下几个优点:
1、使用多路复用技术,在同一个连接中可以并行处理多个请求。
2、可以压缩HTTP头,减少请求的大小。
3、数据传输格式是以二进制进行的,所以传输更加有效。
4、服务器可以向客户端推送数据,从而让应用程序可以处理更加复杂的功能。
1、利用JDK的Keytools生成签名证书
# 进入cmd后输入下面命令生成证书
# -genkeypair 表示生成一对公私钥。
# -alias myalias 是你给密钥指定的别名。
# -keyalg RSA 指定密钥算法,RSA是最常用的。
# -keysize 2048 指定密钥大小。
# -storetype PKCS12 指定密钥库类型,PKCS12是推荐的类型。
# -keystore keystore.p12 是新密钥库的文件名,默认保存在当前用户目录下。
# -validity 3650 指定证书的有效期,这里是100年。
keytool -genkeypair -alias myalias -keyalg RSA -keysize 2048 -storetype PKCS12 -keystore keystore.p12 -validity 36500
2、复制证书到Spring boot资源目录下并配置参数
server:
ssl:
key-store: classpath:ssl/keystore.p12
key-store-password: aipuouXXXAA
key-store-type: PKCS12
key-alias: myalias
http2:
enabled: true
3、在浏览器下查看协议:h2代表成功开启HTTP/2

4、Nginx反向代理开启HTTP/2,docker nginx证书见Linux篇幅
# 开启压缩
gzip on;
# 开启静态gz文件返回, 例如 /dist 文件夹的gz文件,其他的是实时压缩
gzip_static on;
# 启用gzip压缩的最小文件,小于设置值的文件将不会压缩
gzip_min_length 1k;
# 设置压缩所需要的缓冲区大小
gzip_buffers 32 4k;
# 设置gzip压缩针对的HTTP协议版本
gzip_http_version 1.1;
# gzip 压缩级别,1-9,数字越大压缩的越好,也越占用CPU时间
gzip_comp_level 7;
# 进行压缩的文件类型。javascript有多种形式。其中的值可以在 mime.types 文件中找到。
gzip_types text/html text/xml application/json font/woff2 text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png application/vnd.ms-fontobject font/ttf font/opentype font/x-woff image/svg+xml;
# 是否在http header中添加Vary: Accept-Encoding,建议开启
gzip_vary on;
server {
listen 80;
listen [::]:80;
server_name www.aipuou.com aipuou.com;
return 301 https://$server_name$request_uri; # 所有HTTP请求重定向到HTTPS,$server_name只能取到第一个,需要www的放最前面
}
server {
listen 443 ssl;
server_name aipuou.com;
ssl_stapling off;
ssl_certificate /etc/nginx/ssl/cert.pem; # 证书自动安装的路径
ssl_certificate_key /etc/nginx/ssl/key.pem; # 证书自动安装的路径
return 301 https://www.aipuou.com$request_uri; # 不带www请求重定向到www
}
server {
listen 443 ssl http2; # 开启SSL和HTTP2
server_name www.aipuou.com;
ssl_stapling off;
ssl_certificate /etc/nginx/ssl/cert.pem; # 证书自动安装的路径
ssl_certificate_key /etc/nginx/ssl/key.pem; # 证书自动安装的路径
location / {
proxy_pass https://10.1.24.11:802; # 反向代理到本地局域网IP地址
index index.html index.htm;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header REMOTE-HOST $remote_addr;
add_header X-Cache $upstream_cache_status;
add_header Cache-Control no-cache;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
5、优先Spring boot 内置Tomcat参数:2核2G的服务器使用如下配置
server:
ssl:
key-store: classpath:ssl/keystore.p12
key-store-password: aipuouXXXAA
key-store-type: PKCS12
key-alias: myalias
http2:
enabled: true
tomcat:
max-connections: 500 #最大连接数,max-connections = max-threads * 100 (根据实际带宽调整)
accept-count: 50 #请求处理线程都在使用时,传入连接请求的最大队列长度
threads:
max: 5 #请求处理线程的最大数量,合理的max-threads = (CPU核心数 * 2) + 1
min-spare: 1 #最小备用线程数
6、Docker JVM设置
# 禁止同时使用 -Xmx 和 -XX:MaxRAMPercentage(优先百分比,建议70%,不能超过75%)、ActiveProcessorCount: cpu核数、MaxMetaspaceSize:元空间内存、virtualThreadScheduler.parallelism:虚拟线程调度器并行度(建议 = 容器 CPU 核数)
ENV JAVA_OPTS="-XX:MaxRAMPercentage=70.0 -XX:InitialRAMPercentage=35.0 -XX:+UseZGC -XX:+ZGenerational \
-XX:+UseStringDeduplication -XX:ActiveProcessorCount=2 \
-Djdk.virtualThreadScheduler.parallelism=2 "
浙公网安备 33010602011771号