淺談|WEB 伺服器 -- Caddy

Caddy

Caddy伺服器(或稱Caddy Web)是一個開源的,使用 Go 編寫,支援 HTTP/2 的 Web 服務端,說到Web 伺服器,我們大多想到的是 Apache 和 Nginx,在擁有了強大的 Nginx 以後我們為什麼還需要 Caddy?

官網:https://caddyserver.com

優點:
  • 自動支援HTTP/2協議
  • 使用 Let’s Encrypt 讓你的站點全自動變成全站HTTPS,無需任何配置,當然您可以使用自己的金鑰和證書
  • 得益於 Go 的特性,Caddy 只是一個小小的二進位制檔案,沒有依賴,易於部署/使用 配置起來十分簡便
  • 可以合理使用多核
  • Caddy 對 WebSockets 有很好的支援
  • 自動把 Markdown 轉成 HTML
  • 完全支援最新的IPv6
  • 以自定義格式建立日誌
  • 適用於所有已知的平臺 - Windows,Linux,BSD,Mac,Android
缺點:

要說它的缺點,就是效率不如Apache、Nginx,因此對於以下幾種還是十分友好的

推薦場景:
  • 作為 個人部落格的 Server
  • 作為 靜態頁面的 WebServer
  • 反向代理,管理多個站點
  • 微服務 等等…

安裝

Caddy 提醒定製化的下載,可以自由選擇各種外掛和平臺,請前往官網: https://caddyserver.com/download 下載

一、一鍵指令碼安裝(非商業版本)1

curl https://getcaddy.com | bash -s personal

指令碼執行完成後,執行 which caddy,可以看到 caddy 已被安裝到了 /usr/local/bin/caddy;caddy -version 檢視版本號

二、手動安裝(需要商業許可證)

  • https://caddyserver.com/download 進入到 caddy 官網的下載介面,選擇平臺和外掛
  • 然後使用下方 Direct link to download 內的連結即可
  • 解壓之後用 cp 命令放到 /usr/local/bin/caddy 就完成了安裝

執行

caddy

輸入 caddy,然後開啟瀏覽器輸入: http://ip:2015 ,得到了一個404頁面,Caddy 已經成功運行了

(1)、在無配置檔案的情況下,Caddy 預設是對映當前程式執行的目錄所有檔案(即/usr/local/bin),因此可以建立一個檔案:

touch index.html

echo "<h1>Hello Caddy...</h1>" >> index.html

重新整理瀏覽器, Hello Caddy… 已經出現在頁面上

(2)、預設情況下,Caddy 執行在 2015 埠,可以使用 Caddy 命令列工具來自定義執行埠

例:改為執行在80埠

caddy -port 80

其他幫助:

caddy -h

配置檔案

一、Host網站配置

Caddy 的各種強大功能還得需要 Caddyfile 來體現,Caddy 不強制你把配置檔案放到哪個特定資料夾,可以在任意目錄放置我們的配置檔案,通過命令列 caddy -conf 即可指定

建立配置檔案(本文我們把配置檔案放在/usr/local/bin/下)

touch /usr/local/bin/Caddyfile            #建立配置檔案
chown -R root:www-data /usr/local/bin     #設定目錄資料許可權

 

編輯 /usr/local/bin/Caddyfile 檔案

echo -e ":80 {
root /usr/local/bin/www
}" > /usr/local/bin/Caddyfile
解釋
這是一個最簡單的 Host 網站配置
‘:80’表示將網站繫結至可以訪問到本機的任意一個IP,暴露在80埠,也可以寫成 ‘0.0.0.0:80’
root 引數則表示網站的根節點

通過 caddy -conf /usr/local/bin/Caddyfile 命令用Caddyfile配置檔案方式執行Caddy

拓展配置
設定響應過期時間,啟用 gzip, 指定各種日誌的輸出端等等
echo -e "0.0.0.0:80 {
root /usr/local/www/
timeouts none #響應過期時間 none - 不過期 60s - 1分鐘過期
gzip #啟用gzip
log /var/log/caddy/access.log #日誌
errors /var/log/caddy/error.log #錯誤日誌 }" > /usr/local/bin/Caddyfile

 

二、反向代理配置

echo -e ":80/api {
    proxy / 127.0.0.1:8080/api {
        transparent
    }
}" > /usr/local/bin/Caddyfile

 

解釋:
當瀏覽器收到所有包含:80/api 的請求都會自動轉發到127.0.0.1:8080/api 這個地址
transparent 這個設定保證了轉發不會在瀏覽器生成任何額外的 301 或者 302 請求

三、自動HTTPS

為已經繫結域名的伺服器自動從 Let’s Encrypt 生成和下載 HTTPS 證書,支援 HTTPS 協議訪問,你只需要將繫結的 IP 換成 域名 即可

echo -e "xxx.com {
    root /var/www/html/
}" > /usr/local/bin/Caddyfile

 

執行Caddy,按照提示輸入你的 Email 之後,Caddy 會自動幫你獲取並啟用 HTTPS 證書

Caddy 簡單易用、自動 HTTPS ,此外 Caddy 還提供一大堆的外掛供我們使用,是一款不錯的 Web 伺服器


  1. (1)、需要 curl 檔案傳輸工具支援,如果出現 -bash: curl: command not found 請先安裝 curl 
    (2)、You must specify a personal or commercial license; see getcaddy.com for instructions. – 您必須指定個人或商業許可證; 有關說明,請參閱 https://getcaddy.com 
    假設有非商業許可證,請使用: 
    curl https://getcaddy.com | bash -s personal 
    或者 
    wget -qO- https://getcaddy.com | bash -s personal 
    您購買了商業許可證,則必須設定您的帳戶,環境變數中的ID和API金鑰: 
    export CADDY_ACCOUNT_ID = ... 
    export CADDY_API_KEY = ... 
    然後使用: 
    curl https://getcaddy.com | bash -s commercial