切換語言為:簡體

一個比 Nginx 還簡單好用的開源 Web 伺服器,基於 Go 語言實現的Web伺服器!

  • 爱糖宝
  • 2024-08-30
  • 2070
  • 0
  • 0

企業級的 Web 伺服器非常多,Nginx、Tomcat、Apache、IIS、FastAPI、Flask 等。今天鬆哥再給大家介紹一個開源的 Web 伺服器,這款伺服器具備自動 HTTPS 功能和高度可配置性,它的名字是:Caddy。

Caddy 是一個 Go 編寫的 Web 伺服器,類似於 Nginx,Caddy 提供了更加強大的功能,隨著 v2 版本釋出,Caddy 已經可以作為中小型站點 Web 伺服器的另一個選擇。

相較於 Nginx 來說使用 Caddy 的優勢如下:

  1. 自動HTTPS:Caddy 的自動 TLS 功能,讓 HTTPS 變得觸手可及,無需額外配置。

  2. 配置簡便性:Caddy 提供了兩種配置方式——簡潔的 Caddyfile 和功能豐富的 JSON 格式。

  3. 配置靈活性:透過 JSON API,Caddy 允許實時更新配置,提供了極大的靈活性。

  4. 代理能力:Caddy 的 HTTP 反向代理功能強大而靈活。

  5. 靜態資源託管:作為靜態檔案伺服器,Caddy 已經證明了其在生產環境中的可靠性和擴充套件性。

  6. 全平臺支援:Caddy 支援 Linux、Windows、macOS 等多種作業系統。

  7. 高效能:Go 語言的開發背景,保證了 Caddy 的高效效能和記憶體安全。

Caddy 輕量簡單,對新手也比較友好,我們一起來看下 Caddy 的用法吧。

一 安裝

可以直接使用 Linux 裏邊的包管理工具來安裝 Caddy。

例如,在 Ubuntu 中我們可以使用如下命令安裝:

sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
sudo apt update
sudo apt install caddy

如果是 Redhat 或者是 CentOS 的話,則可以使用如下命令安裝:

yum install yum-plugin-copr
yum copr enable @caddy/caddy
yum install caddy

當然,這玩意也提供了 Docker 映象,也可以使用 Docker 安裝。

二 配置

Caddy 的配置檔案可以是 JSON 格式或 Caddyfile 格式。

Caddyfile 是一種更加簡潔的文字配置格式,適合快速配置常見的用例。

下面我將重點介紹 Caddyfile 的配置方式。

2.1 Caddyfile 基礎語法

Caddyfile 使用簡單的文字格式,每一行可以包含一個伺服器塊,其中包含域名、TLS 設定和其他指令。伺服器塊以域名開始,後面跟著一系列的指令。

伺服器塊

一個典型的 Caddyfile 伺服器塊如下所示:

javaboy.org {
    # 配置指令
}

常見指令

這裏有一些常用的指令:

  • root: 指定網站的根目錄。

  • tls: 用於自動獲取和管理 TLS/SSL 證書。

  • proxy: 用於配置反向代理。

  • rewrite: 用於重寫 URL。

  • gzip: 開啟 GZIP 壓縮。

  • auth: 配置基本的身份驗證。

  • cache: 配置快取設定。

  • log: 配置日誌輸出。

2.2 示例配置

下面是一個簡單的 Caddyfile 示例,該示例配置了一個網站,並自動為該網站啟用 HTTPS:

javaboy.org {
    root /var/www/html
    tls admin@javaboy.org
    
    gzip
    log /var/log/caddy/access.log combined
    
    # 反向代理到後端服務
    proxy / localhost:8080 {
        websocket
        transparent
    }
    
    # 基本身份驗證
    auth /admin user:password
}

解釋

  • javaboy.org: 域名,可以是多個域名,用空格隔開。

  • root /var/www/html: 指定網站內容所在的目錄。

  • tls admin@example.com: 為域名自動配置 TLS 證書,並指定用於接收證書通知的電子郵件地址。

  • gzip: 啟用 GZIP 壓縮。

  • log /var/log/caddy/access.log combined: 將訪問日誌記錄到指定的檔案中。

  • proxy / localhost:8080: 將所有請求代理到本地的 8080 埠。websockettransparent 分別表示支援 WebSocket 協議和透明代理。

  • auth /admin user:password: 對 /admin 路徑下的資源啟用基本的身份驗證。

2.3 高階配置

Caddy 還支援更復雜的配置,例如使用子塊來進一步細化配置。例如,可以使用 route 子塊來根據請求路徑執行不同的操作:

javaboy.org {
    root /var/www/html
    tls admin@javaboy.org

    # 根據路徑路由請求
    route {
        /static/* {
            gzip
            fileserver /var/www/static
        }

        /api/* {
            proxy / localhost:8000
        }

        /* {
            index index.html
        }
    }
}

在這個例子中,/static/* 路徑下的請求被直接傳送到 /var/www/static 資料夾,而 /api/* 路徑下的請求被代理到本地的 8000 埠。

2.4 多個伺服器配置

Caddyfile 支援在同一檔案中配置多個伺服器:

javaboy.org {
    # javaboy.org 的配置
}

sub.javaboy.org {
    # sub.javaboy.org 的配置
}

2.5 動態配置

除了靜態配置檔案之外,Caddy 還支援動態配置,可以透過 HTTP API 來更改配置。這使得你可以根據執行時條件動態調整伺服器行為。

三 最佳實踐

3.1 部署靜態網頁

http://yousite.com {
	encode gzip # gzip壓縮
	root * /var/web/wwwroot # web根目錄
	file_server browse  # 啟動靜態資源
}

注意,如果配置根目錄下有 index.html 檔案,則會自動部署為靜態網頁,如果沒有則為由 Caddy 提供的檔案共享的瀏覽網頁。

3.2 部署 File_server

yousite.com {
   	root * /var/share #根目錄
   	file_server browse #啟動web檔案服務
}

3.3 反向代理

 yousite.com {
      	reverse_proxy localhost:8082 #反向代理
 }

3.4 其他

caddy adapt  ## 載入配置檔案
  
caddy fmt	 ## 格式化配置
  
caddy start  ## 啟動服務

caddy reload ## 重新部署

四 小結

Caddy 內建了豐富的外掛,例如內建 “file_server”、內建各種負載均衡策略等,這些外掛組合在一起可以實現一些複雜的功能;Caddy 是採用 go 編寫的,官方也給出了詳細的開發文件,相較於 Nginx 來說,Caddy 的外掛開發上手要容易得多;Caddy 本身針對資料儲存、動態後端、配置檔案轉換等都內建了擴充套件介面,這為有特定需求的擴充套件開發打下了良好基礎。

綜合來看目前 Caddy2 的效能損失可接受的情況下,相較於 Nginx 絕對是個絕佳選擇,各種新功能都能夠滿足現代化 Web 站點的需求

0則評論

您的電子郵件等資訊不會被公開,以下所有項目均必填

OK! You can skip this field.