Caddy伺服器(或Caddy Web)是一個開源的使用 GoLang 編寫,支援 HTTP/2 的 Web 服務端。它使用 GoLang 標準庫提供 HTTP 功能, Caddy 一個顯著的特性是預設啟用 HTTPS,它是第一個無需額外配置即可提供 HTTPS 特性的 Web 伺服器。

Caddy和我們常用的Nginx、Apache等Web伺服器相比,最大的特點就是部署簡單,它擁有基本的apache或是nginx有的web server模組,同時還有一些很有特色的功能,例如: HTTP/2、 Automatic HTTPS、Multi-core、Websockets、Markdown、IPv6等等。

Caddy可以用於靜態和動態網站,當然不少人看到了Caddy易於安裝部署的特點,將Caddy與網盤、下載等各類應用整合,這樣既發揮了Caddy部署配置簡單的優勢,同時又可以最大限度節省伺服器資源,專注於第三方應用的開發管理。
Caddy最容量上手的輕量級Web Server-自動化HTTPS一分鐘部署網站網盤應用

本文就來分享Caddy伺服器的安裝與使用,更多的網站建置工具與腳本,還有:

  1. 三款優秀的線上檔案管理器(目錄列表)比較-Directory Lister、h5ai和FileRun
  2. Smokeping安裝與設定-免費開源網路效能監控工具視覺化主/從部署
  3. OneinStack一鍵安裝腳本-輕鬆部署Let’s Encrypt憑證設定Https站點

PS:2018年2月21日更新,正在找免費的網盤程序,你還可以試試這個:利用Pydio搭建免費私有雲存儲-多終端自動同步可在線播放音樂視頻。

一、Caddy安裝方法

Caddy官網:

  1. 網址:https://caddyserver.com/
  2. 下載:https://caddyserver.com/download
  3. Github:https://github.com/mholt/caddy

Caddy安裝與部署只有三個步驟。 首先,根據你的伺服器作業系統選擇Caddy版本並下載(Linux和Windows都支援)。

二、Caddy配置方法

2.1  建立設定檔

首先建立設定檔放到 /etc/caddy 裡。

sudo mkdir /etc/caddy
sudo touch /etc/caddy/Caddyfile
sudo chown -R root:www-data /etc/caddy

除了設定文件,caddy 會自動產生 ssl 證書,需要一個資料夾放置 ssl 證書。

sudo mkdir /etc/ssl/caddy
sudo chown -R www-data:root /etc/ssl/caddy
sudo chmod 0770 /etc/ssl/caddy

因為 ssl 資料夾裡會放置私鑰,所以權限設定成 770 禁止其他使用者存取。 最後,建立一下放置網站檔案的目錄,如果已經有了,就不需要建立了。

sudo mkdir /var/www
sudo chown www-data:www-data /var/www

2.2  設定開機啟動

創建好這些檔案和目錄了之後,我們需要把 caddy 配置成一個服務,這樣就可以開機自動運行,並且管理起來也方便。因為目前大多數發行版都使用 systemd 了,所以這裡只講一下如何設定 systemd。

sudo curl -s https://raw.githubusercontent.com/mholt/caddy/master/dist/init/linux-systemd/caddy.service -o /etc/systemd/system/caddy.service   # 从 github 下载 systemd 配置文件
sudo systemctl daemon-reload        # 重新加载 systemd 配置
sudo systemctl enable caddy.service # 设置 caddy 服务自启动
sudo systemctl status caddy.service # 查看 caddy 状态

2.3  編輯Caddyfile。

可以直接 vim /etc/caddy/Caddyfile 來修改 Caddyfile,也可以再自己電腦改好然後上傳到伺服器。如果修改了 Caddyfile 發現沒有生效,是需要執行一下 sudo systemctl restart caddy.service 來重啟 caddy 。

2.4  Caddyfile 的格式

Caddfile的格式還是比較簡單的,首先第一行必須是網站的位址,例如:

localhost:8080

wzfou.com

位址可以帶一個連接埠號,那麼 caddy 只會在這個連接埠上開啟 http 服務,而不會開啟 https,如果不寫連接埠號碼的話,caddy 會預設綁定 80 和 443 端口,同時啟動 http 和 https 服務。地址後面可以再跟一大堆指令(directive)。 Caddyfile 的基本格式就是這樣,由一個網站位址和指令組成。

2.5  指令

指令的作用是為網站開啟某些功能。指令的格式有三種,先說一下最簡單的不含參數的指令例如:

wzfou.com    
gzip

第二行的 gzip 是指令,它表示開啟 gzip 壓縮功能,這樣網站在傳輸網頁是可以降低流量。第二種指令的格式是帶有簡單參數的指令:

wzfou.com
gzip
log /var/log/caddy/access.log
tls iwzfou@gmail.com
root /var/www/

第三行,log 指令會為網站開啟 log 功能,log 指令後的參數告訴 caddy log 檔案存放的位置。第四行的 tls 指令告訴 caddy 為網站開啟 https 並自動申請證書,後面的 email 參數是告知 CA 申請人的郵箱。 (caddy 會預設使用 let’s encrypt 申請證書並續約,很方便吧)

另外,簡單參數也可能不只一個,例如 redir 指令:

wzfou.com
gzip
log /var/log/caddy/access.log
tls /etc/ssl/cert.pem /etc/ssl/key.pem
root /var/www/
redir / https://wzfou.com/archive/{uri} 301

上面的 redir 指令帶了三個參數,意思是把所有的請求使用 301 重定向,這個指令在為網站換網域的時候很有用。另外 tls 指令變了,不單單傳 email一個參數, 而是分別傳了證書和私鑰的路徑,這樣的話 caddy 就不會去自動申請證書,而是使用路徑給出的證書了。

在這個例子裡也使用了 {uri} 這樣的佔位符(placeholder),詳細的清單可以在這裡查詢:https://caddyserver.com/docs/placeholders。最後一種指令是帶複雜參數的,這種指令包含可能很多參數,所以需要用一對花括號包起來,例如 header 指令:

wzfou.com
gzip
log /var/log/caddy/access.log
tls iwzfou@gmail.com
root /var/www/
header /api {
    Access-Control-Allow-Origin  *
    Access-Control-Allow-Methods "GET, POST, OPTIONS"
    -Server
}
fastcgi / 127.0.0.1:9000 php {
    index index.php
}
rewrite {
    to {path} {path}/ /index.php?{query}
}

6-10 行的header 指令代表為所有的/api/xxx 的請求加上Access-Control-Allow-OriginAccess-Control-Allow-Methods 這兩個header,從而能支援javascript 跨網域訪問,第9 行代表刪除Server header,防止別人看到伺服器類型。

11-13 行使用了 fastcgi 指令,代表把請求透過 fastcgi 傳給 php,ruby 等後端程式。

14-15 行,使用了rewrite 指令,這個指令的作用是伺服器內部重定向 在下面的參數to 後面,又跟了三個參數,這個功能上有點類似nginx 的try_files 。告訴 caddy 需要先查看網址根目錄 /var/www 裡有沒有 {path} 對應的文件,如果沒有再查看有沒有 {path} 對應的目錄,如果都沒有,則轉發給 index.php 入口文件。這個功能一般會用在 PHP 的 MVC 框架上使用。

2.6  多網域網站

上面說的都是單一網域的網址,那麼如果在同一個伺服器上部署多個網域的網站呢?很簡單,只需要在網域後面跟一個花括號擴起來就可以了,如下:

wzfou.com {
    gzip
    log /var/log/caddy/wzfou_com.log
    tls iwzfou@gmail.com
    root /var/www/
    header /api {
        Access-Control-Allow-Origin  *
        Access-Control-Allow-Methods "GET, POST, OPTIONS"
        -Server
   }
    fastcgi / 127.0.0.1:9000 php {
        index index.php
    }
    rewrite {
        to {path} {path}/ /index.php?{query}
    }
}
wzfou.com{
    tls iwzfou@gmail.com
    log /var/log/caddy/wzfou_com.log
    redir / https://wzfou.com/{uri} 301
}

基本的 caddy 設定就這些,更多的內容需要查閱官網文件:https://caddyserver.com/docs。

三、Caddy一鍵建站腳本

看了上面的Caddy的配置,有朋友可能覺得有沒有一鍵建站的Caddy腳本呢?

3.1  Caddy-Web-Server-Installer

  1. 專案網址:https://github.com/sayem314/Caddy-Web-Server-Installer

系統需求:Ubuntu 14.x15.x16.xDebian 7.x8.x9.xCentOS 6.87.2。運行以下命令:

wget https://git.io/vra5C -O - -o /dev/null|bash

然後使用下列命令進行操作:

caddy start  #开启Caddy Web Server
caddy stop  #停止Caddy Web Server
caddy reload  #重载Caddy Web Server
caddy restart  #重启Caddy Web Server
caddy status  #查看Caddy Web Server状态
caddy install  #安装Caddy Web Server
caddy edit  #编辑配置文件Caddyfile
caddy service  #使Caddy Web Server成为一项服务(upstart/systemd)
caddy update  #升级Caddy Web Server
caddy delete  #卸载Caddy and data
caddy about  #关于Caddy Web Server
caddy version  #检测脚本/Caddy/PHP5-fpm版本信息

安裝插件命令:

caddy install http.cache,http.filemanager,http.ipfilter,http.ratelimit

安裝caddy的時候會要求你輸入域名,郵箱(幫你自動簽發ssl),然後使用命令啟動caddy即可!

虚拟主机文件夹:/var/caddywww
配置文件夹:/etc/Caddyfile

這是安裝成功的介面:

也可以在線上插入音訊、視訊等。

四、總結

用Caddy作為Web伺服器,從安裝與運行幾乎只需要幾分鐘的時間,當然Caddy也可以像nginx那樣實現緩存、鏡像等,Caddy的配置規則也比較簡單,你只需要花上幾分鐘的時間學習官網的文檔就可以自己「依葫蘆畫瓢」了。

Caddy會自動簽發Let’s Encrypt免費證書,但你需要先把網域解析到伺服器上,否則你在新增虛擬主機時會發生錯誤。關於能否將Caddy用作正式的生產環境,目前來看還是有待商榷的,但是Caddy用為簡單的Http伺服器是沒有問題的。

發表評論