升级到Caddy2

两个月前,Caddy更新了v2版本,相比v1版本,其主要特点是:

  • localhost也能自动获取HTTPS
  • 支持HTTP/3(还没有一个浏览器的稳定版支持
  • 支持Zstandard压缩算法(同样还没有一个浏览器的稳定版支持
  • 更复杂的Caddyfile配置

虽然早就想更新到新版本,但折腾了两次V2Ray都不work,遂一直没有升级。今天发现V2Ray的新白话文指南中给出了Caddy v2的配置方法,故趁热打铁把服务升级至新版本。

我使用Caddy主要是两个功能,静态网站托管与端口反向代理,这里主要介绍两项功能在v1和v2中的区别。

  • 静态网站托管

    借助static file server实现,v1版本中只需要一行:

    root /path/to/root
    

    v2版本中需要更改为:

    root * /var/www/blog
    file_server
    
  • 反向代理

    对与HTTP代理,v1版本中依然只需要一行:

    proxy /path 127.0.0.1:8000
    

    但使用WS代理时需要特别说明:

    proxy /path 127.0.0.1:8000 {
        websocket
    }
    

    而v2版本的reverse_proxy默认支持WS代理,这里给出一个通用的反向代理模板:

    reverse_proxy localhost:8000 {
        header_up Host {http.reverse_proxy.upstream.hostport}
        header_up X-Real-IP {http.request.remote}
        header_up X-Forwarded-For {http.request.remote}
        header_up X-Forwarded-Port {http.request.port}
        header_up X-Forwarded-Proto {http.request.scheme}
    }
    

    此外,v2提供Named matchers来对反向代理提供更加详细的设定,比如V2Ray白话文教程中提供给的样例:

    @v2ray_websocket {
        path /ray
        header Connection *Upgrade*
        header Upgrade websocket
    }
    reverse_proxy @v2ray_websocket localhost:10000
    
  • 压缩编码

    v1中:

    gzip
    

    v2中需使用encode命令,顺带把Zstandard压缩开启,相比gzip,zstd的压缩率和速度均更强,万一哪天浏览器支持了呢:

    encode gzip zstd
    
  • HTTP/3

    需要在Caddyfile中写入:

    experimental_http3
    
  • 自启动

    Caddy提供了官方的service文件,下载覆盖即可。

以上基本就是我从Caddy v1迁移至v2使用的全部了,升级过后并没有什么新特性可用,使用体验也没有任何改善,但至少,短时间内应该不用瞎折腾了吧。