[解決済み] Spring BootでTomcatを使用してHTTP2を有効にする
2022-02-19 15:44:49
質問
Tomcat 8.5 でのデフォルトになります。 Spring Boot 1.4 をサポートします。 HTTP/2 .
どのようにして HTTP/2 で有効になります。 スプリングブート アプリケーションを作成できますか?
どのように解決するのですか?
を有効にする最もエレガントでベストパフォーマンスな方法です。
HTTP/2
をSpring Bootアプリケーションで使用する場合は、以下のようになります。
まず、Andy Wilkinsonの回答にあるように、TomcatレベルでHTTP/2を有効にする必要があります。
@Bean
public 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が必要であることを忘れないでください。
次に
HAProxy
(バージョン >= 1.7)
をTomcatの前に置いて、暗号化の面倒を見るようにしました。
クライアントはHAProxyにhttpsを話し、HAProxyはクライアントが要求したようにバックエンドに平文のHTTP/1.1またはHTTP/2を話します。 不必要なプロトコル変換はありません。
対応するHAProxy-configurationはこちらです。
# Create PEM: cat cert.crt cert.key ca.crt > /etc/ssl/certs/cert.pem
global
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
2019年を編集する
tcpモードを使用する際、2つの問題に直面します。
- 圧縮はhttpモードに依存するため、動作しない。そのため、バックエンドがそれを処理する必要があります。
- バックエンドはクライアントのIPアドレスを見ることができない。おそらくNATが必要なのでしょう。まだ調査中です...
一般的に、HAPROXYは低レベルのTCP接続をプロキシするので、httpのものにはアクセスできません。
関連
-
[解決済み] java.sql.SQLException: ユーザー 'root'@'localhost' (using password: YES) のためのアクセスが拒否されました。
-
[解決済み】予期しない型エラー
-
[解決済み] HTTP GET(リクエストボディ付き
-
[解決済み] java.net.URLConnectionを使用してHTTPリクエストを発生させ処理する方法
-
[解決済み] Javaで文字列を分割する方法
-
[解決済み] Spring Bootアプリケーションにポートを設定する方法
-
[解決済み] Tomcat 7でwarファイルを配備する方法
-
[解決済み】HTTPのPOSTとPUTの違いは何ですか?
-
[解決済み】Spring Boot起動後のコード実行について
-
[解決済み] TomcatでSpring Bootを起動するときのユーザー名とパスワードは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Hibernateエラー:同じ識別子値を持つ別のオブジェクトがすでにセッションに関連付けられました。
-
[解決済み] if / for / while 内で "Missing return statement" が発生する。
-
[解決済み】「'void' type not allowed here」エラーの原因とは?
-
[解決済み】Java JDK - doubleからintへの非可逆変換の可能性
-
[解決済み】Eclipseがエラーメッセージ "Java was started but returned exit code = 1" を返す
-
[解決済み】Mockitoでモックからチェックされた例外を投げる
-
[解決済み】java 'jar'が内部コマンドまたは外部コマンドとして認識されない。
-
[解決済み】Eclipseで「JUnitテストが見つかりませんでした。
-
[解決済み】Javaの".class expected "について
-
[解決済み] SQLエラー。0, SQLState: 08S01 通信リンクの失敗 [重複]。