Debian9安裝配置CaddyServer

行者武松發表於2018-03-13

Caddy 是一個用 Golang 開發的高效 Web Server,相比 Nginx,它的配置和使用要簡單很多,能自動開啟 HTTPS、並且支援 HTTP/2 和 QUIC。

下載安裝 Caddy

首先去 Download Caddy 選擇你需要的外掛,然後複製下方的 One-step installer script (bash),例如我的是

$ curl https://getcaddy.com | bash -s
http.cache,http.cors,http.expires,http.filemanager,http.git,http.ipfilter,http.minify,http.nobots,http.ratelimit,http.realip,tls.dns.cloudflare

安裝完後輸入 which caddy,不出意外的話會輸出 /usr/local/bin/caddy

至此,安裝完畢,但是目前它不會開機自啟,只是簡單地把二進位制檔案下載下來,所以下一步要註冊服務。

註冊服務到Systemd

這裡我使用的是官方提供的指令碼 caddy.service,其他系統也可以在這裡找到相應的指令碼。

把這個檔案下載到 /etc/systemd/system/ 。

sudo curl -s https://raw.githubusercontent.com/mholt/caddy/master/dist/init/linux-systemd/caddy.service -o /etc/systemd/system/caddy.service

建立所需目錄,我圖方便沒有修改指令碼直接使用預設值了,如果有特殊需求,可以自己更改目錄。

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

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

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

上面建立了三個目錄,/etc/caddy 用了存放 Caddy 的配置檔案,/etc/ssl/caddy 存放證書,/var/www 是預設的網站目錄。

接著,重新載入 systemd daemon,讓配置生效。

sudo systemctl daemon-reload

讓 Caddy 開機自啟:

sudo systemctl enable caddy.service

至此,Caddy 已經成功註冊服務,並能夠開機自動執行了。

配置Caddy

這部分的內容我不打算詳細記錄,主要是官方文件已經寫的很詳細了。下面是我的配置,

example.com {
  proxy / 127.0.0.1:9001 {
    header_upstream Host {host}
    header_upstream X-Real-IP {remote}
    header_upstream X-Forwarded-For {remote}
    header_upstream X-Forwarded-Proto {scheme}
  }

  gzip
  header / -Server
  header / Strict-Transport-Security "max-age=31536000;"
  tls user@example.com {
    protocols tls1.0 tls1.2
    dns cloudflare
  }
}

如果要使用 DNS 的方式認證域名的話,需要設定環境變數,修改 /etc/systemd/system/caddy.service ,加入環境變數,我使用的是 CloudFlare 的 DNS,所以我需要新增 CLOUDFLARE_EMAIL 和 CLOUDFLARE_API_KEY ,其他 DNS 看這裡

[Service]
...
Environment=CADDYPATH=/etc/ssl/caddy
+ Environment=CLOUDFLARE_EMAIL=xxx
+ Environment=CLOUDFLARE_API_KEY=xxx
...

寫完配置後輸入 sudo systemctl start caddy.service 啟動 Caddy。輸入 journalctl --boot -u caddy.service 可以檢視日誌。

啟用 QUIC

關於 QUIC 的介紹,可以看一下這篇文章,一句話概況呢就是減少 TLS 握手次數,加快網站速度。

修改 /etc/systemd/system/caddy.service ,在 ExecStart=/usr/local/bin/caddy -log stdout -agree=true -conf=/etc/caddy/Caddyfile -root=/var/tmp 後面加上 -quic ,即

ExecStart=/usr/local/bin/caddy -log stdout -agree=true -conf=/etc/caddy/Caddyfile -root=/var/tmp -quic

然後重新載入 Systemd,並重啟 Caddy

sudo systemctl daemon-reload && sudo systemctl restart caddy.service

同時,別忘了給主機開放 443 (UDP) 埠。

目前 QUIC 只有 Chrome 支援,並且需要手動開啟(預設只有白名單域名啟用)。訪問 chrome://flags/#enable-quic,切換為 Enabled 即可。開啟後,重啟 Chrome,訪問網站,通過 Chrome DevTools – Security 可以看到協議已經是 QUIC 了。

關於效能

Caddy 是 Go 寫的,效能方面是稍落後於 Nginx 的,但其實對於小站來說,這一點效能差距是可以忽略的,畢竟 You Are Not Google 。

原文釋出時間:2017-12-24

本文來自雲棲社群合作伙伴“Debian社群”,瞭解相關資訊可以關注“Debian社群”。


相關文章