从nginx迁移到caddy

힘센캥거루
2025년 5월 25일(수정됨)
3
75

在用nginx设置反向代理还不到一天,我看到下面的图片。

从nginx迁移到caddy-1

什么…… nginx的时代结束了?

无法忍受。

我决定再次从nginx迁移到caddy。

1. 什么是caddy?

Caddy是用Go语言编写的现代网络服务器和反向代理服务器。

由于简单的设置、自动HTTPS、快速性能而非常受欢迎。

根据chatgpt的说法,比较如下表所示。

项目

Caddy

Nginx

🛠️ 设置难度

非常简单 (Caddyfile)

中等到困难 (nginx.conf)

🔐 HTTPS支持

自动颁发和更新 (Let's Encrypt)

需要手动设置 (certbot等)

🚀 安装和运行

单一执行文件,即可使用

需要包安装,配置后运行

📦 基本功能

内置反向代理、静态文件、认证、重定向等

多样功能,但部分需要模块安装

🔧 配置灵活性

基础结构直观,对复杂路由稍有局限

高度灵活的配置(但复杂)

📈 性能

高性能(包括HTTP/3支持)

高性能(在大规模流量中验证)

📋 文档及社区

小但快速成长

非常大并成熟的社区

⚙️ 使用目的

快速部署,简单HTTPS,开发者中心

高级配置,复杂基础设施运行

反正我只是用反向代理进行端口分配。

在这方面,caddy看起来更方便。

2. 从nginx迁移到caddy

据说出战的罗马士兵会烧毁回家的船。

我也是这样,先删除了nginx才开始。

反正每天访问的人还不到100,所以没什么大碍。

brew uninstall nginx
从nginx迁移到caddy-2

然后删除了/opt/homebrew/etc内不需要的文件夹。

也可以通过下面的命令删除。

sudo rm -rf /opt/homebrew/etc/nginx
从nginx迁移到caddy-3

接着我安装caddy并设置了Caddyfile,但却没有成功。

后来我发现是因为没有停止nginx服务,所以即使删除后也占用了端口

看这篇文章的人别犯我这样的错误,在安装caddy之前一定要检查端口

通过下面的命令检查端口。

lsofList Open files的缩写,-i表示internet

lsof -i :80
从nginx迁移到caddy-4

我真是一个多么愚蠢的人,因为这浪费了2~3个小时……

在停止端口后也不行,于是我采用了万古治愈法——重启。

然后在/opt/homebrew/etc文件夹中创建了一个名为Caddyfile的文件。

顺便说一下,不需要扩展名。

sudo touch /opt/homebrew/etc/Caddyfile
open /opt/homebrew/etc/Caddyfile

这样在文本编辑器中就会打开Caddyfile。

然后在这里输入如下内容。

example.com, www.example.com {
    reverse_proxy localhost:3000
}

在example.com中输入你想要的域名。

如果有两个域名,以逗号分隔。

用过nginx的人都知道,这配置简单得令人抓狂。

接着启动caddy服务器。

brew services start caddy

这样神奇地颁发了证书。

听说还能自动更新,今后就少了一份担心。

3. 后记

最初入门next.js时,大部分都是用server.js进行https设置的文章。

为什么不告诉我caddy……?

比起其他方法,安装nginx或者caddy似乎要好得多。

对此我想简单地写一篇文章。

관련 글

Next.js 全栈博客开发记
Next.js 全栈博客开发记
在第一次接触网页开发大约 1 年之后,我开始想着想要拥有一个属于自己的博客。于是我就大概花了 6 个月几乎只埋头做这件事。前端部分的功能,参考金度亨先生的博客就已经足够了。我用 mdx 搭建起一个博客,其实连一周都没花到。事实上,仅靠前端也并不会给博客运营带来什么大问题。有一阵子我也觉得,只要写 m...
使用 Caddy 实现 Next.js 无停机部署(本地服务器)
使用 Caddy 实现 Next.js 无停机部署(本地服务器)
每次一有想在主页上加点什么的念头就去 build,结果中间好像偶尔会有人访问。于是 Search Console 上的分数开始一点点往下掉。觉得这样不行,就开始思考要怎么做无停机部署。1. 两个项目文件夹 + 两个终端答案出乎意料地简单:开两个终端。在一个终端里 build,另一个终端里让服务器跑着...
谷歌搜索索引自动化 - Web Search Indexing API
谷歌搜索索引自动化 - Web Search Indexing API
继上次搞完 IndexNow 之后,也决定在谷歌这边做一下自动化。查了一下,发现谷歌是通过一个叫 Web Search Indexing 的 API 来支持这个功能的。1. 适用范围官方文档中,这个 API 正式支持的范围是招聘公告和流媒体视频服务。说是为了给对实时性要求高的内容创建索引用的,但搜了...
搜索索引生成自动化 - IndexNow
搜索索引生成自动化 - IndexNow
在向 Bing 提交站点收录时才发现,Bing 提供了一个叫做 IndexNow 的功能。核心在于,可以利用 API Key,在写完文章的瞬间就立刻发起索引请求。只要用 fetch 写出类似下面这样的请求,并把它串联到「写文章」流程里,就可以在把文章保存到 DB 的同时发送索引生成请求。POST /...
被入侵的 Nextjs、React 服务器经历
被入侵的 Nextjs、React 服务器经历
我最初接触到这次安全问题是在 12 月 5 日凌晨。据说在 React 中可以在未认证的情况下进行远程代码执行。看到这条新闻后,我虽然告诉了别人,但总觉得自己应该没事,就什么想法也没有地略过了。1. 发现被入侵的痕迹结果当我想登录更新博客代码时,在终端里发现了有命令被执行过的痕迹。/bin/sh:...
在博客中添加多语言功能(NextJS、next-intl、Vercel AI SDK)
在博客中添加多语言功能(NextJS、next-intl、Vercel AI SDK)
最近我觉得博客需要多语言功能。于是决定用 next-intl 来实现多语言服务。1.i18n首先,在做多语言服务时有一些必须遵守的原则。这被称为 internationalization,单词太长,所以把首字母 i 和尾字母 n,以及中间 18 个字母合在一起,写成 i18n。1) i18n 的原则...

댓글을 불러오는 중...