用了caddy,再也回不去nginx了

caddy反向代理

caddy 是什么

官网介绍:

Caddy是一款基于Go语言编写的强大且可扩展的平台,可以给你的站点、服务和应用程序提供服务。

我们可以简单理解为一个反向代理服务器,类似于nginx。 有了nginx,并且nginx也很强大,为什么要用caddy呢?

相比于nginxcaddy有以下有点

  • 配置简单
  • 默认启用https,自动管理维护 tls 证书(简直不要太方便)
  • 自带管理API
  • 原生支持http/3,QUIC协议

下面就让我带领大家感受下caddy的魅力。

准备工作

  • 一台有公网ip的服务器
  • 安装go环境(非必须,只要能启动web服务就可以)

下载安装

官网提供的多种下载安装方式(如果有需要,也可从网盘下载,大家可以选择适合自己的方式。这里不再赘述。 如果是以服务形式安装的,一般安装后,服务会自动启动;如果只是下载了二进制文件,则需要执行

sudo ./caddy start 

启动服务。默认监听80(http),443(https)端口。

注意 要确保80端口和443端口没有被防火墙拦截。有的服务器除了防火墙,还需要在控制面板中配置安全策略放行端口。

配置代理静态文件

我们先创建一个文件夹www,再加入一个简单的静态文件index.html,内容如下:

    <!DOCTYPE html>
    <html>
        <head>
            <title>Hello Caddy</title>
        </head>
        <body>
            <h1>Hello Caddy</h1>
        </body>
    </html>

修改caddy配置文件

如果你是以服务的形式安装的,则默认配置文件在/etc/caddy/Caddyfile(可能会有差异,可以稍微找一下);如果是下载的二进制文件,没有Caddyfile,可以在当前文件夹(www)创建一个Caddyfile,内容如下:

static.12358134.xyz {
    root * /path/to/www
    file_server
}

保存后,运行sudo ./caddy reload命令(如果安装了服务,重启服务),重加载配置。

添加DNS解析记录

alt text

域名访问

alt text

可以看到,已经成功访问了,并且自动开启了https。完全不需要关心tls证书的事,只需一个域名(没有域名的可以参考我的另一篇文章永久免费域名caddy把剩下的事都干了。

配置代理web服务

除了代理静态服务,还可以反向代理web服务,我们先创建一个简单的web服务

新建一个main.go文件,内容如下:

package main

import (
	"fmt"
	"net/http"
)

func main() {
	http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
		w.Write([]byte("Hello Caddy"))
	})
	fmt.Println("Server listening on :12346")
	if err := http.ListenAndServe(":12346", nil); err != nil {
		panic(err)
	}
}

运行go run main.go启动服务。

修改caddy配置文件

添加如下内容

goweb.12358134.xyz {
    reverse_proxy localhost:12346
}

同样需要重启下caddy服务。

注意 我们已经把本地服务交给caddy代理了,所以这里我们不用开放12346端口了。

访问测试

修改域名解析记录,然后访问测试。

alt text

简直太方便了,再也不用搞nginx繁琐的配置了。

相关链接: