日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Caddy Web服务器QUIC部署

發布時間:2024/4/11 编程问答 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Caddy Web服务器QUIC部署 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Caddy 簡介

Caddy是一個Go語言寫的,易于使用的通用Web服務器。它具有如下的一些功能:

  • 配置簡單:Caddy服務器的運行可以通過Caddyfile配置文件進行配置,Web服務配置起來非常簡單。
  • 自動的HTTPS:它可以自動地為我們申請 Let's Encrypt 域名證書,管理所有的密碼學設施,并進行配置。
  • HTTP/2:默認支持HTTP/2(由Go標準庫支持)
  • 虛擬主機托管:Caddy支持TLS的SNI。SNI是在2006年加入TLS的一個TLS擴展??蛻舳嗽赥LS握手的Client Hello消息中,通過SNI擴展將請求的資源的域名發送給服務器,服務器根據SNI的域名來下發TLS證書。這樣就可以在具有單個公網IP的同一臺主機上部署多個不同的域名的服務。可以為Caddy服務的不同域名配置不同的證書和密鑰。
  • QUIC支持:Caddy實驗性地支持QUIC協議,以獲取更好的性能。
  • TLS session ticket key rotation for more secure connections
  • 良好的可擴展性:因此Caddy非常方便針對自己的需求做定制。
  • 隨處運行:這主要與Go應用程序的特性有關。Go的模塊都被編譯為靜態庫,這使得Go的應用程序在編譯為可執行文件時都是靜態鏈接的,因而依賴的動態庫極少,這使得部署使用非常方便。

自動的HTTPS、HTTP/2支持、QUIC支持和隨處運行這些特性非常有吸引力,特別是對QUIC的支持。

此外,Caddy的性能非常好。下面兩幅圖是我的靜態個人博客站點,分別是用Caddy和nginx作為Web服務器,打開主頁所需的加載時間對比:


Service with Caddy
Service with nginx

上面的圖顯示了以Caddy作為Web服務器,主頁的加載時間只有680ms;下面的圖顯示以nginx作為Web服務器,主頁的加載時間則長達1.99s,要慢接近2倍。

Caddy部署

Caddy應用程序不依賴于其它組件,且官方已經為不同的平臺提供了二進制可執行程序??梢酝ㄟ^如下三種方式之一安裝Caddy:

  • 在 下載頁,通過瀏覽器定制自己需要的功能集,并下載相應的二進制可執行程序。
  • 預編譯的 最新發行版 二進制可執行程序。
  • curl getcaddy.com 來自動安裝:curl https://getcaddy.com | bash。

將caddy的路徑加如PATH環境變量中。之后可以 cd 進入網站的文件夾,并運行 caddy來提供服務。默認情況下,Caddy在2015端口上為網站提供服務。

要定制網站提供服務的方式,可以為網站創建名為Caddyfile的文件。當運行 caddy 命令時,它會自動地在當前目錄下尋找并使用Caddyfile文件來為自己做配置。

要了解更多關于Caddyfile文件的寫法,可以參考 Caddyfile 文檔。

注意生產環境網站默認是通過HTTPS提供服務的。

Caddy還有命令行接口。運行caddy -h 可以查看基本的幫助信息,或參考 CLI文檔 來了解更多詳情。

以Root運行:建議不要這樣做。但依然可以通過像這樣使用setcap來監聽端口號小于1024的端口:sudo setcap cap_net_bind_service=+ep ./caddy

由源碼運行

注意:需要安裝 Go 1.7或更新的版本才可以。

  • go get github.com/mholt/caddy/caddy
  • cd 進入網站的目錄
  • 執行caddy(假設 $GOPATH/bin 已經在 $PATH 中了)
  • Caddy的 main() 再caddy子目錄下。要編譯Caddy,可以使用在那個目錄下找到的 build.bash。

    在生產環境運行

    Caddy項目官方不維護任何系統特有的集成方法,但下載的文檔中包含了社區共享的 非官方資源,用以幫助在生產環境運行Caddy。

    以何種方式運行Caddy全由自己決定。許多用戶使用 nohup caddy & 就可以滿足需求了。其他人使用 screen。有些用戶需要再重啟之后就運行Caddy,可以在觸發重啟的腳本中來做到這一點,通過給init腳本添加一個命令,或給操作系統配置一個service。

    可以看一下我的個人博客站點的完整Caddyfile內容:

    wolfcstech.com:80 www.wolfcstech.com:80 {root /home/www-data/www/hanpfei-documents/publicredir 301 {if {>X-Forwarded-Proto} is http/ https://{host}{uri}} }wolfcstech.com:443 www.wolfcstech.com:443 {tls /home/www-data/www/ssl/chained.pem /home/www-data/www/ssl/domain.key#tls test@admpub.comroot /home/www-data/www/hanpfei-documents/publicgziplog ../access.log }

    啟用QUIC

    Caddy 0.9 已經實驗性地提供了對QUIC的支持,這主要通過 lucas-clemente/quic-go 來實現。要嘗試這個特性,可以在運行caddy時加上 -quic 標記:

    $ caddy -quic

    這樣執行之后,則帶有TLS加密的Web服務,在客戶端支持QUIC時,將默認通過QUIC協議來完成數據的傳輸。

    不啟用QUIC時,在啟動caddy之后,在服務器端查看已打開的端口號:

    # lsof -i -P COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME AliYunDun 1120 root 10u IPv4 2023899 0t0 TCP 139.196.224.72:40309->106.11.68.13:80 (ESTABLISHED) . . . . . . caddy 6163 root 6u IPv6 2338478 0t0 TCP *:80 (LISTEN) caddy 6163 root 8u IPv6 2338479 0t0 TCP *:443 (LISTEN) . . . . . .

    而在通過如下命令:

    # nohup ./caddy -quic &

    啟用QUIC提供Web服務之后,在服務器端查看已打開端口號,則可以看到如下內容:

    # lsof -i -P COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME AliYunDun 1120 root 10u IPv4 2023899 0t0 TCP 139.196.224.72:40309->106.11.68.13:80 (ESTABLISHED) . . . . . . caddy 6222 root 6u IPv6 2338880 0t0 TCP *:80 (LISTEN) caddy 6222 root 8u IPv6 2338881 0t0 TCP *:443 (LISTEN) caddy 6222 root 9u IPv6 2338883 0t0 UDP *:80 caddy 6222 root 10u IPv6 2338885 0t0 UDP *:443 . . . . . .

    Caddy 除了監聽http的TCP 80端口和https 的TCP 443端口之外,還監聽了UDP的80和443端口。

    客戶端支持

    Chrome 52+ 支持QUIC而無需白名單,但需要確認 #enable-quic 標記已經被啟用了。通過在Chrome瀏覽器的地址欄輸入chrome://flags/:


    Enable QUIC

    并根據需要啟用QUIC。

    然后通過Chrome打開你的網站,則它應該是以QUIC提供服務的!可以通過打開inspector 工具并進入Security tab來驗證這一點。重新加載頁面并點擊來查看連接詳情:


    caddy005.png

    如果你使用老版的Chrome,則為了省事,可以升級一下。

    如果你不想升級,則可以:你將需要以特殊的參數來運行Chrome。再Mac上 (將YOUR_SITE替換為你的網站的實際域名)執行如下命令:

    $ /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome \--user-data-dir=/tmp/chrome \--no-proxy-server \--enable-quic \--quic-host-whitelist="YOUR_SITE" "YOUR_SITE"

    QUIC的好處

    QUIC是基于UDP的TLS+HTTP的可靠傳輸協議。它加速了TLS握手為只有一個往返,避免了TCP慢啟動,并提供了網絡切換時的可靠性。通過QUIC可以讓網站加載更快且更可靠。

    問題排解

    首先,確保在Caddyfile文件中為域名做了適當的設置,還要確保在啟動Chrome的命令行中為域名做了適當的設置。

    接著,網站必須使用一個真實的可信的證書(至少,是在寫的時候)。

    如果那都是好的,而且你對Go語言比較了解,則你可以添加 import "github.com/lucas-clemente/quic-go/utils",并在Caddy的main()函數的某個地方調用utils.SetLogLevel(utils.LogLevelDebug)。那將提供非常詳細的輸出。(注意這個log設施不是一個公共的API)。

    當你進入chrome://net-internals/#events,你應該看到一些QUIC事件被標為紅色。


    Net Events

    總結

    以上是生活随笔為你收集整理的Caddy Web服务器QUIC部署的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。