Nginx
為什麼 Chrome 瀏覽器無法辨識我的 nginx http2 伺服器?
我根據 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的回答:
可能是以下兩個原因之一:
- 您正在使用防病毒軟體,它是 MITM 您的流量,因此將您降級到 HTTP/1.1。關閉 AV 上的 https 流量監控以直接連接到伺服器。
- 根據上述指南的第 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 支持,所以跳過它這個答案。