3.6 萬顆星!開源 Web 服務器后起之秀,自帶免費 HTTPS 開箱即用


眾所周知,Web 服務器是 Web 開發中不可或缺的基礎服務,在開發中經常會用到。耳熟能詳的開源 Web 服務器有久負盛名的 Apache、性能強勁的 Nginx。而我們今天要介紹的開源項目是采用 Go 編寫的 Web 服務端“后起之秀”:Caddy 它擁有下載無需安裝就能用、零配置實現 HTTPS 等特點,從而在強者如雲的 Web 服務器中占據了一席之地。

在這個 HTTPS 必選的時代,Caddy 憑借無需額外配置自動 HTTPS,分分鍾完成 HTTPS 站點搭建,使它成為了中小型 Web 服務的首選服務器。Caddy 深受開源愛好者們的喜愛,2014 年開源至今共收獲了 3.6 萬顆星。

項目地址:https://github.com/caddyserver/caddy

一、為什么使用 Caddy ?

Caddy 是一個強大的、可擴展的平台,可以為您的站點、服務和應用程序提供服務。

使用 Caddy 可以在 Linux、Mac、Windows 上快速部署 http(s) 站點或反向代理服務。支持:

  • HTTP/1.1 和 HTTP/2
  • 同時接受 HTTPS 自動簽發和手動管理
  • 虛擬主機 (多個站點工作在單個端口上)
  • 原生 IPv4 和 IPv6 支持
  • 靜態文件分發
  • 平滑重啟/重載
  • 反向代理 (HTTP 或 WebSocket)
  • 負載均衡和健康性檢查
  • Markdown 渲染
  • 文件瀏覽服務
  • 等等

與傳統的 Nginx 或者 Apache 相比,Caddy 整體只有一個可執行文件,安裝便捷不易出現奇怪的依賴問題,配置文件結構清晰語法簡單易於上手,依托於模塊化架構可以使用 Go 語言快速開發擴展模塊

下面讓我們上手把玩一番吧。

二、安裝

系統環境:Ubuntu 20.04 LTS

Caddy 可以作為一個系統服務安裝,命令:

sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo tee /etc/apt/trusted.gpg.d/caddy-stable.asc
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

注意:這種方式安裝完成后會啟動服務,開機自動啟動。

還可以下載一個可執行文件使用。

  1. 下載地址:https://caddyserver.com/download
  2. 在網頁上方選擇自己的操作系統后,點擊右側藍色的 Download 按鈕即可
  3. 下載好的文件不能夠直接運行,需要為其添加權限
    $ mv caddy_linux_amd64 caddy # 將下載后的文件重命名方便后面指令輸入,根據系統不同文件名不一樣
    $ sudo chmod a+x caddy # 為 Caddy 添加可執行權限
    $ mv caddy /bin/caddy # 將 Caddy 復制到 bin 目錄這樣可以在命令行隨時使用
    

命令行執行 caddy version 命令,出現版本信息:

v2.4.6 h1:HGkGICFGvyrodcqOOclHKfvJC0qTU7vny/7FhYp9hNw=

即為安裝成功!

三、從零完成 HTTPS 站點

下面將演示如何通過 Caddy 完成 HTTPS 站點。只需要 4 步:

Tips 例子用的域名為:caddy.hellogithub.com 修改為你的域名即可。

第一步:安裝,采用上面介紹的命令安裝

第二步:設置域名解析地址,在購買域名的網站設置。如下圖:

設置完生效需要幾分鍾,可通過下面的命令檢查是否生效:

curl "https://cloudflare-dns.com/dns-query?name=caddy.hellogithub.com&type=A" -H "accept: application/dns-json"

域名設置生效,返回如下:

{"Status":0,"TC":false,"RD":true,"RA":true,"AD":false,"CD":false,"Question":[{"name":"caddy.hellogithub.com","type":1}],"Answer":[{"name":"caddy.hellogithub.com","type":1,"TTL":592,"data":"107.150.122.176"}]}

第三步:創建配置文件 Caddyfile,無需額外的開啟 HTTPS 的設置:

caddy.hellogithub.com

respond "Hello HTTPS!"
  1. 域名
  2. 訪問返回的內容

第四步:啟動,在同一目錄下執行命令:sudo caddy run

Caddy 默認使用執行命令目錄下的 Caddyfile 文件內的配置。

最后,訪問 caddy.hellogithub.com 檢驗效果吧!

四、上手教程

這里將從 Caddy 常用命令開始,再到配置講解,最后會通過一個實際案例來展示如何用 Caddy 配置網站和上線。

4.1 常用命令

4.2 配置文件

Caddy 的原生配置文件使用的是 JSON 格式。但是為了用戶編寫方便它提供了 Caddyfile 作為接口讓用戶可以快速配置站點信息,運行時 Caddy 會自動將 Caddyfile 的配置信息轉為 JSON 配置文件。

Caddyfile 所能提供功能不如 JSON 配置文件強大,但是對於不需要復雜配置的用戶而言完全夠用了。

Caddyfile 的配置指令格式如下:

directive [<matcher>] <args...> { # matcher 代表匹配器,如果提供則該指令將只對 matcher 描述的資源進行響應
	subdirective [<args...>]	# 子指令
}

Caddyfile 的文件結構如圖所示:

4.3 演示

下面將演示如何用 Caddy 搭建站點,加深理解配置格式和命令使用。

目錄結構:

.
├── Caddyfile
├── index.html
└── public
    └── HG.html

兩個頁面文件 index.htmlHG.html 的內容如下:

<!-- index.html -->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Hello World!</title>
</head>
<body>
    你好,世界!
</body>
</html>
<!-- HG.html -->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>HelloGitHub</title>
</head>
<body>
    HelloGitHub
</body>
</html>

Caddyfile 配置內容如下:

# 如果本機沒有 wordpress 則注釋這一塊兒的站點配置
#:80 { # 部署一個 wordpress 站點
#	root * /var/www/wordpress
#	php_fastcgi unix//run/php/php-version-fpm.sock # 配置一個 fastcig 服務
#	file_server	# 配置一個文件服務
#}

http://localhost:3000 {
	basicauth /public/* {
		# 匹配訪問 localhost:3000/public/* 的請求,為其加上登陸保護
		HG JDJhJDE0JGEySk9janFMdHlBY2Y0aVdQZklQak9HcmwzNDZhNFg0N3V5Ny9EZkZMZHB1Nkt4ZE5BNGJt
		# 用戶名 HG 密碼 HelloGitHub,密碼使用 caddy hash-passowrd 指令生成
	}

	root * ./ # 設置當前站點根目錄為當前文件夾,* 表示匹配所有的 request
	templates
	file_server {
		# 配置當前站點為靜態文件服務器,可用於博客系統的搭建
		hide .git # 隱藏所有的 .git 文件
	}
}

:4000 {
	reverse_proxy /public/* http://localhost:3000 # 配置反向代理
	# 只會匹配 locahost:4000/public 的請求,轉發到 localhost:3000/public/
}

在當前目錄輸入:

$ caddy run # 啟動 Caddy

最后,效果如下:

  1. 訪問:http://localhost:3000 可以看到頁面展示 “你好,世界!”

  2. 訪問:http://localhost:3000/public/HG.html 提示輸入用戶名和密碼,驗證正確后才能看到頁面。

  3. 訪問:http://localhost:4000 則會自動跳轉到端口 3000 的頁面

4.4 提供接口管理方式

Caddy 除了簡單易懂的配置文件方式,還提供了管理配置的接口。通過這些接口可以輕松實現 Web 服務器管理自動化、集成發布等高級功能。

提供的接口和功能:

由於篇幅問題這里就不再進行演示了,如果您想深入了解可以閱讀 Caddy 的官方文檔

五、總結

看到這里你應該對 Caddy 有了一些了解,有沒有一種相見恨晚的感覺?

雖然它的性能比不了 Nginx,但如果論上手的難易度 Caddy 甩 Nginx 幾條街!主要是默認開啟 HTTPS 功能太香了,你什么都不用管就可以免費、快速、輕松開啟網站 HTTPS。

最后,如果你想搭建個靜態博客或小站,快去試試 Caddy 吧!香不香只有“吃”過才知道~

這里是 HelloGitHub 推出的《講解開源項目》系列,為您叩開開源項目的大門。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM