关键词搜索

全站搜索×
密码登录在这里
×
注册会员

已有账号? 请点击

使用其他方式登录

Caddy2安装使用教程-比Nginx功能更强大下一代Web服务器

发布2022-11-15浏览61次

详情内容

Caddy2安装使用教程-比Nginx功能更强大下一代Web服务器,Caddy 2 是一个强大的、企业级的、开源的 Web 服务器。是一个 Go 编写的 Web 服务器,类似于 Nginx,Caddy 提供了更加强大的功能。

支持 HTTP/2 的 Web 服务端。它使用 Golang 标准库提供 HTTP 功能。Caddy 一个显著的特性是默认启用HTTPS。它是第一个无需额外配置即可提供HTTPS 特性的Web 服务器。

官网:https://caddyserver.com

文档:https://caddyserver.com/docs/


Caddy2特点:

  • 自动的 HTTPS 证书申请(ACME HTTP/DNS 挑战)

  • 自动证书续期以及 OCSP stapling 等

  • 更高的安全性包括但不限于 TLS 配置以及内存安全等

  • 友好且强大的配置文件支持

  • 支持 API 动态调整配置(有木有人可以搞个 Dashboard?)

  • 支持 HTTP3(QUIC)

  • 支持动态后端,例如连接 Consul、作为 k8s ingress 等

  • 后端多种负载策略以及健康检测等

  • 本身 Go 编写,高度模块化的系统方便扩展(CoreDNS 基于 Caddy1 开发)


Caddy2安装:

以下操作均为ubuntu环境

源安装(推荐)

sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https 
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/cfg/gpg/gpg.155B6D79CA56EA34.key' | sudo apt-key add -
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/cfg/setup/config.deb.txt?distro=debian&version=any-version' | sudo tee -a /etc/apt/sources.list.d/caddy-stable.list
sudo apt update
sudo apt install caddy

安装完成后,在命令窗口输入caddy,可以查看caddy相关的命令。

usage:
 caddy <command> [<args...>]

commands:
 adapt           Adapts a configuration to Caddy's native JSON
 build-info      Prints information about this build
 environ         Prints the environment
 file-server     Spins up a production-ready file server
 fmt             Formats a Caddyfile
 hash-password   Hashes a password and writes base64
 help            Shows help for a Caddy subcommand
 list-modules    Lists the installed Caddy modules
 reload          Changes the config of the running Caddy instance
 reverse-proxy   A quick and production-ready reverse proxy
 run             Starts the Caddy process and blocks indefinitely
 start           Starts the Caddy process in the background and then returns
 stop            Gracefully stops a started Caddy process
 trust           Installs a CA certificate into local trust stores
 untrust         Untrusts a locally-trusted CA certificate
 validate        Tests whether a configuration file is valid
 version         Prints the version

下载安装并手动注册linux service

首先到官网下载Caddy2,然后将下载的文件改名为caddy后上传至服务器。

sudo mv caddy /usr/bin/
caddy version #测试是否正常运行
sudo groupadd --system caddy
sudo useradd --system \
    --gid caddy \
    --create-home \
    --home-dir /var/lib/caddy \
    --shell /usr/sbin/nologin \
    --comment "Caddy web server" \
    caddy

下载caddy.service文件,并移动到/etc/systemd/system/caddy.service。然后可以通过以下指令配置caddy运行状态:

sudo systemctl daemon-reload #重载配置
sudo systemctl enable caddy    #启用caddy
sudo systemctl start caddy     #开启caddy
sudo systemctl reload caddy     #应用所有配置文件修改
sudo systemctl status caddy     #查看caddy状态
sudo systemctl stop caddy       #停止caddy

使用官方服务文件时,caddy输出将重定向到journalctl

journalctl -u caddy --no-pager | less

编辑配置文件

Caddy2与Caddy1不同,开始使用json作为默认的配置文件,但是仍然可以使用Caddyfile进行配置,后续内容均使用Caddyfile。默认Caddyfile路径为/etc/caddy,使用vi或nano编辑该文件,若无该文件则手动创建。

cd /etc/caddy
touch Caddyfile #若目录下无配置文件
sudo nano Caddyfile

在配置文件填写以下内容:

your domain {
        root * /root/deploy #你需要发布的文件路径
        file_server
}

这样网站就可以跑起来了,但是还没有配置 HTTPS,自动的HTTPS是个人使用Caddy的最大优势。


Auto-HTTPS

Caddy的Auto-HTTPS验证有几种方法,分为HTTP验证、TLS-ALPN验证和DNS验证。


HTTP验证与TLS-ALPN验证

这两种验证方式分别需要80端口和443端口没有被其他服务占用,可被Caddy使用。

这两种验证的配置方式较为简单,仅需要在配置文件中添加:

tls xxxxx@xxx.com #你的邮箱

就可以实现自动HTTPS。
配置完成后的完整配置:

your domain {
        root * /root/deploy #你需要发布的文件路径
        file_server
        tls xxxxx@xxx.com  #你的邮箱
}

DNS 验证

以Cloudflare为DNS托管服务商为例。首先去Cloudflare控制台,选择站点->获取您的 API 令牌->API令牌->创建令牌->编辑区域DNS->使用模板,选择相关配置后,创建令牌,复制并记录令牌。在Caddyfile的网站配置中添加一下语句。

tls {
    dns cloudflare $your_token 
}

配置完成后的完整配置:

your domain {
        root * /root/deploy #你需要发布的文件路径
        file_server
        tls {
            dns cloudflare $your_token 
        }
}

Cloudflare的DNS验证需要Caddy的验证插件,而源安装的版本是不带验证插件的,需要对caddy源文件进行替换,首先去官网下载预编译插件版本源文件,注意选择插件,运行平台后下载。

下载后上传至服务器,并移动源文件至/usr/bin/目录下。

sudo mv caddy /usr/bin/
chmod +x /usr/bin/caddy #赋可执行权限

重启Caddy,并运行caddy list-modules,查看插件是否已在已安装列表中。

image.png

这里就完成了基于DNS验证的Auto-HTTPS的配置。

关于Auto-HTTPS更详细进一步的配置参考请官方文档。


进一步配置

Caddyfile 支持类似代码中函数一样的配置片段,可以在任意位置被 import引入,且可以传递参数,下面分别配置一部分配置片段。

启用HTHS ( HTTP Strict Transport Security,HTTP严格传输安全 ), 它告诉浏览器只能通过HTTPS访问当前资源,而不是HTTP:

(HSTS) {
    # HSTS (最大时长63072000 seconds)
    header / Strict-Transport-Security "max-age=63072000"
}

错误处理
处理404错误页面,指向网站根目录的404页面:

(ERROR_HANDLE) {
        handle_errors {
                @404 {
                        expression {http.error.status_code} == 404
                }
                handle @404 {
                        rewrite * /404.html
                        file_server
                }
        }
}

开启并配置log

(LOG) {
    log {
        output file "{args.0}" {
                roll_size     500MiB #滚动存储大小最大500MiB
                roll_local_time     #使用服务器本地时间
                roll_keep     20    #保存20个版本的滚动log
                roll_keep_for 30d #滚动保存时长30天
        }
    }
}

其中{args.0}为通过参数传递的log文件名信息。

配置TLS使其更安全

(TLS_CONFIG) {
    # TLS 配置采用 https://mozilla.github.io/server-side-tls/ssl-config-generator/ 生成
    # Due to a lack of DHE support, you -must- use an ECDSA cert to support IE 11 on Windows 7
    protocols tls1.2 tls1.3
    ciphers TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256 TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256
}

聚合为通用配置

(GENERAL_CONFIG) {
        # 使用HTTP验证或TLS-ALPN验证
        tls xxxxxx@xxx.com {
            import TLS_CONFIG    
        }
        # HSTS
        import HSTS
        # 压缩支持
        encode zstd gzip
        # 错误处理
        import ERROR_HANDLE
}

配置全局设置
尝试在全局设置中开启HTTP3支持

{
        servers :443 {
                protocol {
                                experimental_http3
                } 
        }
}

完善最终配置文件

(TLS_CONFIG) {
    # TLS 配置采用 https://mozilla.github.io/server-side-tls/ssl-config-generator/ 生成
    # Due to a lack of DHE support, you -must- use an ECDSA cert to support IE 11 on Windows 7
    protocols tls1.2 tls1.3
    ciphers TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256 TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256
}

(LOG) {
    log {
        output file "{args.0}" {
                roll_size     500MiB
                roll_local_time
                roll_keep     20
                roll_keep_for 30d
        }
    }
}


(HSTS) {
   # HSTS (最大时长63072000 seconds)
    header / Strict-Transport-Security "max-age=63072000"
}

(ERROR_HANDLE) {
        handle_errors {
                @404 {
                        expression {http.error.status_code} == 404
                }
                handle @404 {
                        rewrite * /404.html
                        file_server
                }
        }
}

(GENERAL_CONFIG) {
     # 使用HTTP验证或TLS-ALPN验证
        tls xxxxxx@xxx.com {
            import TLS_CONFIG    
        }
        # HSTS
        import HSTS
        # 压缩支持
        encode zstd gzip
        # 错误处理
        import ERROR_HANDLE
}

{
        servers :443 {
                protocol {
                                experimental_http3
                } 
        }
}

example.com {
        # Set this path to your site's directory.
        root * /root/deploy #替换为你需要发布的文件路径
        file_server
        import LOG "/root/deploy/logs/example.com.log" #替换为你需要的文件路径和文件名
        import GENERAL_CONFIG
}
# 引入其他的站点配置
import /etc/caddy/*.caddy

启动与运行

首先使用caddy validate命令,验证配置文件语法有无错误。

caddy validate --config /etc/caddy/Caddyfile

停止并重新启动caddy

caddy stop
caddy start

或者

caddy reload --config /etc/caddy/Caddyfile

将静态网站内容上传至发布目录,配置防火墙端口放行后,网站应该就可以访问了。

点击QQ咨询
开通会员
返回顶部
×
  • 微信支付
  • 支付宝付款
微信扫码支付
微信扫码支付
请使用微信描二维码支付
×

提示信息

×

选择支付方式

  • 微信支付
  • 支付宝付款
确定支付下载