1. 程式人生 > >如何在 Apache 中啟用 HTTP/2

如何在 Apache 中啟用 HTTP/2

剛釋出的 Apache httpd 2.4.17 終於支援 HTTP/2 了。這個頁面給出了一些如何構建/部署/配置的建議。目的是為了大家發現 bugs 時能升級它,或者給一些能更好工作的建議。

最後,這會歸併回到官方 Apache 文件,這裡只會留下一個到那裡的連結。暫時我們還沒做到。

原始碼

你可以從這裡得到 Apache 版本。Apache 2.4.17 及其更高版本都支援 HTTP/2。我不會再重複介紹如何構建該伺服器的指令。在很多地方有很好的指南,例如這裡

(有任何這個試驗性軟體包的相關連結?在 Twitter 上告訴我吧 @icing)

編譯支援 HTTP/2

在你編譯版本之前,你要進行一些配置。這裡有成千上萬的選項。和 HTTP/2 相關的是:

  • --enable-http2

    啟用在 Apache 伺服器內部實現該協議的 ‘http2’ 模組。

  • --with-nghttp2=<dir>

    指定 http2 模組需要的 libnghttp2 模組的非預設位置。如果 nghttp2 是在預設的位置,配置過程會自動採用。

  • --enable-nghttp2-staticlib-deps

    很少用到的選項,你可能想將 nghttp2 庫靜態連結到伺服器裡。在大部分平臺上,只有在找不到共享 nghttp2 庫時才有用。

如果你想自己編譯 nghttp2,你可以到 nghttp2.org 檢視文件。最新的 Fedora 以及其它版本已經附帶了這個庫。

TLS 支援

大部分人想在瀏覽器上使用 HTTP/2, 而瀏覽器只在使用 TLS 連線(https:// 開頭的 url)時才支援 HTTP/2。你需要一些我下面介紹的配置。但首先你需要的是支援 ALPN 擴充套件的 TLS 庫。

ALPN 用來協商negotiate伺服器和客戶端之間的協議。如果你伺服器上 TLS 庫還沒有實現 ALPN,客戶端只能通過 HTTP/1.1 通訊。那麼,可以和 Apache 連結並支援它的是什麼庫呢?

  • OpenSSL 1.0.2
     及其以後。
  • ??? (別的我也不知道了)

如果你的 OpenSSL 庫是 Linux 版本自帶的,這裡使用的版本號可能和官方 OpenSSL 版本的不同。如果不確定的話檢查一下你的 Linux 版本吧。

配置

另一個給伺服器的好建議是為 http2 模組設定合適的日誌等級。新增下面的配置:

1 2 3 4 5 6 # 放在某個地方的這樣一行 LoadModule http2_module modules/mod_http2.so <IfModule http2_module> LogLevel http2:info </IfModule>

當你啟動伺服器的時候,你可以在錯誤日誌中看來類似的一行:

1 2 [timestamp] [http2:info] [pid XXXXX:tid numbers] mod_http2 (v1.0.0, nghttp2 1.3.4), initializing...

協議

那麼,假設你已經編譯部署好了伺服器, TLS 庫也是最新的,你啟動了你的伺服器,打開了瀏覽器。。。你怎麼知道它在工作呢?

如果除此之外你沒有新增其它的伺服器配置,很可能它沒有工作。

你需要告訴伺服器在哪裡使用該協議。預設情況下,你的伺服器並沒有啟動 HTTP/2 協議。因為這樣比較安全,也許才能讓你已有的部署可以繼續工作。

你可以用新的 Protocols 指令啟用 HTTP/2 協議:

1 2 3 4 5 6 # 對於 https 伺服器 Protocols h2 http/1.1 ... # 對於 http 伺服器 Protocols h2c http/1.1

你可以給整個伺服器或者指定的 vhosts 新增這個配置。

SSL 引數

對於 TLS (SSL),HTTP/2 有一些特殊的要求。閱讀下面的“ https:// 連線”一節瞭解更詳細的資訊。

http:// 連線 (h2c)

儘管現在還沒有瀏覽器支援,但是 HTTP/2 協議也工作在 http:// 這樣的 url 上, 而且 mod_h[ttp]2 也支援。啟用它你唯一所要做的是在 Protocols 配置中啟用它:

1 2 # 對於 http 伺服器 Protocols h2c http/1.1

這裡有一些支援 h2c 的客戶端(和客戶端庫)。我會在下面介紹:

curl

Daniel Stenberg 維護的用於訪問網路資源的命令列客戶端 curl 當然支援。如果你的系統上有 curl,有一個簡單的方法檢查它是否支援 http/2:

1 2 3 4 sh> curl -V curl 7.43.0 (x86_64-apple-darwin15.0) libcurl/7.43.0 SecureTransport zlib/1.2.5 Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp smb smbs smtp smtps telnet tftp Features: AsynchDNS IPv6 Largefile GSS-API Kerberos SPNEGO NTLM NTLM_WB SSL libz UnixSockets

不好了。這些功能中沒有 'HTTP2'。你想要的是下面這樣:

相關推薦

如何在 Apache 啟用 HTTP/2

剛釋出的 Apache httpd 2.4.17 終於支援 HTTP/2 了。這個頁面給出了一些如何構建/部署/配置的建議。目的是為了大家發現 bugs 時能升級它,或者給一些能更好工作的建議。 最後,這會歸併回到官方 Apache 文件,這裡只會留下一個到

啟用 HTTP/2 導致網站無法訪問說起

提醒:本文最後更新於 1039 天前,文中所描述的資訊可能已發生改變,請謹慎使用。 最近好幾個朋友在給網站開啟 HTTP/2 後,都遇到了無法訪問的問題。其中有的網站只是 Firefox 無法訪問,通過控制檯網路面板可以看到請求被 Abort;有的網站不但 Firefox 無法訪問,連 Chrome

OkHttp3HTTP/2首部壓縮

當前網路環境中,同一個頁面發出幾十個HTTP請求已經是司空見慣的事情了。在HTTP/1.1中,請求之間完全相互獨立,使得請求中冗餘的首部欄位不必要地浪費了大量的網路頻寬,並增加了網路延時。以對某站點的一次頁面訪問為例,直觀地看一下這種狀況: Header 1 Header 2 如

在 Confluence 啟用 HTTP 響應壓縮

Confluence 能夠支援 HTTP 的 GZip 傳輸編碼。這個意味著 Confluence 將可以把資料壓縮後傳輸給使用者,這種配置能夠針對不穩定的網際網路狀態下的傳輸速度緩慢和不穩定並且能夠降低 Confluence 伺服器的頻寬的消耗。 當你有下面的情況的時候,你可以考慮開啟 Confluenc

Centos 6.9 http-2.2 的一些基本操作和 https 的實現

http http-2.2 https 首先聲明: 接下來的所有的操作都是基於防火墻和selinux關閉的情況下;是基於本地的實現;1.建立httpd服務,要求: 1) 提供兩個基於名稱的虛擬主機www1, www2;要求每個虛擬主機都有單獨的錯誤日誌

Centos 7.4 http-2.4 的基本實現和 https 的實現

http-2.4 https 1.建立httpd服務,要求: 1) 提供兩個基於名稱的虛擬主機www1, www2;要求每個虛擬主機都有單獨的錯誤日誌和訪問日誌; 2) 通過www1的/server-status提供狀態信

在CDH5.14.2 啟用kudu的配置與驗證

大數據平臺 hadoop CDH kudu 在CDH5.14.2 中啟用kudu的配置

HTTP/2 服務器推送(Server Push)教程(HTTP/2 協議的主要目的是提高網頁性能,配置Nginx和Apache

tcp tac 面板 參考 寫入 修改 現實 多個 後端 HTTP/2 協議的主要目的是提高網頁性能。 頭信息(header)原來是直接傳輸文本,現在是壓縮後傳輸。原來是同一個 TCP 連接裏面,上一個回應(response)發送完了,服務器才能發送下一個,現在可以多個回

java使用Apache HttpClient傳送Http請求,並獲取返回結果

傳送http請求可以寫成一個工具類,HttpClient可以使用連線池建立,這樣的好處是我們可以自己定義一些配置,比如請求超時時間,最大連線數等等。 public class HttpUtil { private static CloseableHttpClient http

apache iis 使用HTTP 響應頭資訊的 X-Frame-Options屬性

原文:https://www.jb51.net/article/109436.htm 方法三:使用HTTP 響應頭資訊中的 X-Frame-Options屬性 使用 X-Frame-Options 有三個可選的值: DENY:瀏覽器拒絕當前頁面載入任何Frame頁面SAMEORIGIN:

啟動java工程卡在:log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.

剛搭好的框架啟動時候不報錯也不提示,就是卡在 log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info. 不動了,日誌也沒打出相應的錯誤,經過排查錯誤總結有三個問題

tomcat7外掛啟動專案卡在:log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.

運用tomcat7外掛啟動專案後,專案一直卡在log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.下面是卡住時的情況: 我遇到這種情況的原因是:mybatis逆向生成介面及xml檔案

HTTP/2 的 Server Push 討論

提醒:本文最後更新於 1304 天前,文中所描述的資訊可能已發生改變,請謹慎使用。 本文不討論 Server Push 是什麼,也不討論如何使用 Server Push。 如果服務端想要推送的資源本地已經快取過,客戶端會發送 RST_STREAM 告訴服務端不要再傳了。不過根據我的觀察,H2O

apache通過HSTS實現http請求強制跳轉到https

1. HSTS:         HSTS全稱HTTP Strict Transport Security,是國際網際網路工程組織IETE正在推行的一種新的Web安全協議。HSTS的作用是強制客戶端(如瀏覽器)使用HTTPS與伺服器建立連線。         伺服器端配置支援HSTS後,會在瀏覽器返回的HT

使用Apache的HttpClient的例項CloseableHttpClient進行http請求

    對接咪咕音源場景重現:現在公司儲存音樂的id標識等資訊,不包含音樂url。想獲得音樂url,需要 和咪咕進行音源對接。根據咪咕提供的服務介面,實現業務對接。     首先,根據音樂id獲得url,需要拼裝url請求,再新增header頭部資訊。其中,url拼裝比較簡

ASP.net教程]啟用WebApi 2裏的Api描述信息(Help下的Description

ges 相關 方法 eba .net 輸出 右擊 bin 問題 環境:vs2013+web api 2 問題:默認情況下新建的Web Api 2項目,自帶的Help頁下會顯示Api的相關信息,但Description那一欄無法獲取到數據,如下圖所示: 解決: 1.先啟用輸

meta 標簽http-equiv

參數變量 coo set 刷新 -type 調用 value 百葉窗 control http-equiv顧名思義,相當於http的文件頭作用,它可以向瀏覽器傳回一些有用的信息,以幫助正確和精確地顯示網頁內容,與之對應的屬性值為content,content中的內容其實就是

MySql啟用InnoDB數據引擎簡介 以及 InnoDB與 MYISAM的區別和聯系

隔離級別 最終 全文索引 都是 後臺 isa llb ldb 優勢 1、存儲引擎是什麽?   MySQL中的數據用各種不同的技術存儲在文件(或者內存)中。這些技術中的每一種技術都使用不同的存儲機制、索引技巧、鎖定水平並且最終提供廣泛的不同的功能和能力。通過選擇不同的技術,

HTTPS協議在Tomcat啟用是如何配置的

org 證書 lang tails pair ext engine 不同的 image 版權聲明:本文為博主阿甘(Gane_Cheng)原創文章,歡迎轉載,傳播知識,請留言告知並註明出處,方便文章有誤改正之後能找到原文。個人之言,請抱著懷疑的態度參考! 目錄

node.jshttp.response.end方法使用說明

-c 方法 net ron blog 分享 函數 客戶端 pan 轉載自:http://m.jb51.net/article/58468.htm 本文介紹了http.response.end的方法說明、語法、接收參數、使用實例和實現源碼,需要的朋友可以參考下 方法