Caddy 使用手冊

Reverse Proxy

Caddy 是一個能自動創建HTTPS功能的HTTP/2網站伺服器,主打易用性,希望任何人不需要特定知識技術就可以建立自己的 Web Server.。 Caddy 原生支援 Let’s Encrypt,所有網頁預設使用 HTTPS,加上使用Go語言撰寫,因此也具有跨平台的特性。

建立安裝環境

  • caddy.sh
#!/usr/bin/env bash

sudo curl https://getcaddy.com | bash -s personal
sudo chown root:root /usr/local/bin/caddy
sudo chmod 755 /usr/local/bin/caddy
sudo setcap 'cap_net_bind_service=+ep' /usr/local/bin/caddy                      // Port binding
sudo groupadd caddy
sudo useradd -g caddy --home-dir /var/www --no-create-home --shell /usr/sbin/nologin --system caddy
sudo mkdir /etc/caddy
sudo chown -R root:caddy /etc/caddy

## Make the SSL directory to store your SSL configurations:
sudo mkdir /etc/ssl/caddy
sudo chown -R caddy:root /etc/ssl/caddy
sudo chmod 770 /etc/ssl/caddy

## Configure
sudo cp /vagrant/data/Caddyfile /etc/caddy/
sudo chown caddy:caddy /etc/caddy/Caddyfile
sudo chmod 444 /etc/caddy/Caddyfile

## Create the Home directory for Caddy and set the permission and ownership:
sudo mkdir /var/www
sudo chown -R caddy:caddy /var/www
sudo chmod -R 555 /var/www

sudo cp /vagrant/data/caddy.service /etc/systemd/system/
sudo chown root:root /etc/systemd/system/caddy.service
sudo chmod 644 /etc/systemd/system/caddy.service
sudo cp /vagrant/data/index.html /var/www/

##Restart systemd to take effect:
sudo systemctl daemon-reload
sudo systemctl enable caddy
sudo systemctl start caddy
sudo systemctl status caddy

安裝完成後,請記得先設定主機防火牆

  • centos
firewall-cmd --get-default-zone // 查看zone
firewall-cmd --get-active-zones   // 查看運作中的zone和zone裡的介面
firewall-cmd --zone=public --list-all --permanent  // 查看此zone=public所開的服務
firewall-cmd --zone=public --add-port=80/tcp --permanent  // 在public zone新增80TCP的服務
firewall-cmd --zone=public --remove-port=80 --permanent   // 移除在public zone上80埠的所有服務 tcp/udp

Caddyfile 設定檔

  • 單網站設定
:80, :443 {     // IP和 port number
   root /var/www                   // 網站文件路徑
   gzip                                   // gzip 指啟動 gzip 壓縮
   log                                    // log 指啟動存取記錄
     browse                             // 支援檔案列表
}
  • 多網站設定
//Caddyfile
foo.com:80 {
    log ./foo.log
    gzip
}

bar.com:80 {
  middleware1
    middleware2 {
        … …
    }
}
  • middleware 介紹

靜態檔案 Server

  • Caddy Server 預設的靜態檔案為:index.html、index.htm、default.html、default.htm

反向代理 Reverse Server

localhost:2015 {
    log ./2015.log

    proxy /foo localhost:9001       // 訪問 /foo 會進入port 9001
    proxy /bar localhost:9002       // 訪問 /bar 會進入 9002
}

負載平衡 Load balancer

proxy / web1.local:80 web2.local:90 web3.local:100 {
   policy round_robin
     health_check /health
     transparent
}

API Server

:80, :443  {
   root /var/www
   proxy /gorush localhost:100 {
      without /gorush
      websocket
      transparent
   }
   timeouts none
   header /gorush Access-Control-Allow-Origin *
}

支援fastcgi代理

搭配cloudflare使用

使用 caddy & cloudflare,請將 cloudflare 的 SSL 部分,將原本設定的 Flexible 改為 Full,否則,就會出現ERR_TOO_MANY_REDIRECTS 的問題。主要造成的原因是 Caddy 預設會很自動的轉向到 https 。

... 443(cf) -> 80(caddy) -> 請你改連 443(cf) -> 80(caddy) -> loop ... 
如果是 SSL (Full),那麼 443(cf) 就是對 origin server(443) 
所以要改成Full才不會造成問題。
  • 設定方式:
https://blog.caesarchi.com {  
  proxy / localhost:2533
  tls {
    dns cloudflare
  }
}

不同網站匯入不同設定檔設定方式

(mysnippet) {
    limits {
        header 100KB
        body   1MB
    }
    errors errors.log {
        rotate_size 10
        rotate_age  90
    }
}

sub1.example.com {
    import mysnippet
    ...
}

sub2.example.com {
    import mysnippet
    ...
}