Nginx

為什麼 Chrome 瀏覽器無法辨識我的 nginx http2 伺服器?

  • September 8, 2019

我根據 Digital Ocean 論文設置了我的 Nginx conf ,現在 http2 可用…

但是在 Chrome(版本 54.0.2840.98(64 位))開發工具中,它總是在 HTTP 1/1 上:

NAME             METHOD  STATUS  PROTOCOL
shell.js?v=xx..    GET    200     http/1.1

我的伺服器正在執行 Ubuntu 16.04 LTS,它同時支持 ALPN 和 NPN ,並且隨附的 openssl 版本是 1.0.2g

我用這個工具站點檢查了 http2 支持,結果是:

Yeah! example.com supports HTTP/2.0. ALPN supported...

也可以用 curl 檢查

$ curl -I --http2 https://www.example.com
 HTTP/2 200 
 server: nginx/1.10.0 (Ubuntu)
 date: Tue, 13 Dec 2016 15:59:13 GMT
 content-type: text/html; charset=utf-8
 content-length: 5603
 x-powered-by: Express
 cache-control: public, max-age=0
 etag: W/"15e3-EUyjnNnyevoQO+tRlVVZxg"
 vary: Accept-Encoding
 strict-transport-security: max-age=63072000; includeSubdomains
 x-frame-options: DENY
 x-content-type-options: nosniff

我還從控制台檢查了 is-http2 cli

is-http2 www.amazon.com
× HTTP/2 not supported by www.amazon.com
Supported protocols: http/1.1

is-http2 www.example.com
✓ HTTP/2  supported by www.example.com
Supported protocols: h2 http/1.1

用我的本地主機上的 openssl 測試

$ echo | openssl s_client -alpn h2 -connect www.example.com:443 | grep ALPN
depth=2 O = Digital Signature Trust Co., CN = DST Root CA X3
verify return:1
depth=1 C = US, O = Let's Encrypt, CN = Let's Encrypt Authority X3
verify return:1
depth=0 CN = example.com
verify return:1
ALPN protocol: h2
DONE

為什麼 Chrome 被拋在了後面?我如何也可以使用 Safari (v 10.0.1) 檢查它

根據我對StackOverflow的回答:

可能是以下兩個原因之一:

  1. 您正在使用防病毒軟體,它是 MITM 您的流量,因此將您降級到 HTTP/1.1。關閉 AV 上的 https 流量監控以直接連接到伺服器。
  2. 根據上述指南的第 5 步,您正在使用較舊的 TLS 密碼,特別是 Chrome 不允許 HTTP/2 ( https://http2.github.io/http2-spec/#BadCipherSuites ) 的密碼。使用https://www.ssllabs.com/ssltest/掃描您的站點以檢查您的 TLS 配置並改進它。

第三個原因是您的 SSL/TLS 庫中缺乏 ALPN 支持(例如,您使用的是 openssl 1.0.1 並且需要一個 1.0.2 或更高版本)但您已經確認您有 ALPN 支持,所以跳過它這個答案。

引用自:https://serverfault.com/questions/820471