Caddy 设置为反向代理并快速简化对服务的访问。

@高效码农  April 12, 2024

Caddy 是一个用 Go 编写的现代开源 Web 服务器。它的特点是简单、强大以及自动获取和更新 SSL 证书的功能。与传统的 Web 服务器不同,Caddy 以其易用性而闻名,默认情况下强调自动化和安全性。

但 Caddy 的功能不仅仅限于服务静态网站和应用程序;它作为反向代理大放异彩——位于内部应用程序前面的服务器,并将客户端(例如,Web 浏览器)请求转发到适当的服务器。

选择 Caddy 作为您的反向代理解决方案是明智之举。虽然有像 Nginx 这样广受欢迎的替代方案,但与 Caddy 相比,它需要稍微复杂的设置。 Traefik 是另一个绝佳的选择,它提供了卓越的功能和灵活性,特别是对于基于云的解决方案,但其配置复杂性要高得多。

这凸显了为什么 Caddy 成为那些寻求反向代理解决方案的首选,该解决方案将易用性与速度、安全性和可靠性结合在一起,所有这些都在众多生产环境中得到了验证。

这篇内容全面的文章将深入探讨如何利用 Caddy 作为反向代理,指导您完成设置过程和配置。我们很高兴向您展示使用 Caddy 进行设置和运行是多么简单。那么,让我们深入了解一下。

安装Caddy

首先,让我们澄清一些事情:您可以直接通过 Linux 发行版的包管理器安装 Caddy,或者如果您更喜欢基于容器的设置,则可以将其设置为 Docker 容器。在本指南中,我们将探讨这两个选项,从如何将其安装为包开始。

根据您使用的发行版,请使用适当的命令:

Debian、Ubuntu、Linux Mint

sudo apt install caddy

RHEL、Fedora、AlmaLinux、Rocky Linux

sudo dnf install 'dnf-command(copr)' sudo dnf copr enable @caddy/caddy sudo dnf install caddy sudo systemctl enable caddy sudo systemctl start caddy代码语言: JavaScript (javascript )

Arch Linux、Manjaro

sudo pacman -S caddy sudo systemctl enable caddy sudo systemctl start caddy

将 Caddy 设置为反向代理

让我们首先澄清我们的设置。 Caddy 通常用作反向代理,将流量路由到其后面运行的容器化应用程序,因此我们将遵循这种模式。我们选择了两个容器化示例应用程序进行演示:FreshRSS 阅读器和 Memos 笔记应用程序,它们分别在端口 1080 和 5230 上运行。

当然,您可能正在使用许多应用程序 – 10 个、20 个、100 个或更多。球童完全有能力毫无问题地处理如此重的负载。我们只选择了两个应用程序,以使事情尽可能简单明了。

要找出您的 Docker 化应用程序正在哪些端口上运行,您可以通过执行以下命令快速轻松地完成此操作:

docker container ls --format "table {{.ID}}\t{{.Names}}\t{{.Ports}}" -a代码语言: JavaScript (javascript )

查找正在运行的 Docker 容器的暴露端口。

查找正在运行的 Docker 容器的暴露端口。

现在让我们讨论 Caddy 将管理的域记录。在本指南中,我们使用“ tmplinux.com ”,这是我们拥有并用于测试的域。我们将两个特定的 DNS 记录(FreshRss 应用程序的“ rss.tmplinux.com ”和Memos 笔记应用程序的“ memos.tmplinux.com ”)定向到 Caddy 运行的服务器。

但是,如果您没有自己的域,则始终可以在“ /etc/hosts ”文件中为任意域设置一个条目。但如果您不知道如何执行此操作,我们的详细指南会解释一切。

以下是我们的生产流程,以便您更好地直观了解。

Caddy 作为反向代理服务器。

现在一切都清楚了,让我们直奔主题:设置 Caddy 来处理反向代理任务。

编辑 Caddy 文件

我们需要做的就是在主 Caddy 的配置文件中输入非常简单的指令,该文件名为“ Caddyfile ”,位于“ /etc/caddy/ ”目录中。

它告诉 Caddy 如何提供 Web 内容、自动管理 HTTPS 证书、路由请求以及以最少的配置处理其他 Web 服务器任务。简单来说,它是一组指导 Caddy 高效交互和管理网络流量的指令。

使用您喜欢的文本编辑器打开它,删除现有内容,并将其替换为如下所示的内容。立即解释其含义。

sudo nano /etc/caddy/Caddyfile

{ auto_https off } rss.tmplinux.com:80 { reverse_proxy localhost:1080 } memos.tmplinux.com:80 { reverse_proxy localhost:5230 }

初始部分是全局选项块,其中保存适用于整个 Caddy 服务器的设置。我们已将此块中的“ auto_https ”设置指定为“ off ”。这告诉 Caddy 禁用自动 SSL 证书配置和从 HTTP 到 HTTPS 自动重定向等功能。想要了解更多信息,你可以看看 这里

以下两部分定义了 Caddy 将服务的域名。它将接受端口 80 上的请求,并使用“ reverse_proxy ”选项将它们重新路由到我们的 Docker 应用程序的公开端口。由于这些应用程序托管在同一台计算机上,因此我们将地址指定为“ localhost ”。

重新启动球童服务

最后,保存文件,退出,然后重新启动 Caddy:

sudo systemctl restart caddy

确保 Caddy 正在工作:

sudo systemctl status caddy

检查 Caddy 服务。

检查 Caddy 服务。

测试一切是否按预期工作

如果您将浏览器指向“ Caddyfile ”中的子域,Caddy 将充当反向代理,并确保您的请求根据子域名定向到正确的容器。

比这容易多少?只需几行配置,我们就使用 Caddy 设置了一个可靠的反向代理服务器。接下来,我们探讨一下不直接从包安装 Caddy,而是在 Docker 容器中运行它。

将 Caddy 设置为 Docker 容器中的反向代理

要将 Caddy 设置为 Docker 容器内的反向代理,必须确保满足两个关键要求:

  • Caddy 及其将请求转发到的容器应位于同一 Docker 网络中。
  • 在“ Caddyfile ”中,您应该通过容器的名称来引用它们。

设置 Docker 网络

首先,我们选择“ reverse_proxy ”作为名称来创建 Docker 网络。

docker network create reverse_proxy

接下来,我们将验证一切是否正常并且网络是否可用。

docker network ls

设置 Docker 网络。

设置 Docker 网络。

设置 Caddy Docker 文件

创建一个目录“ caddy ”并进入它。

mkdir caddy cd caddy

我们将使用 Docker Compose 部署 Caddy。如果您对此不熟悉,请不要担心 -我们的综合指南将帮助您快速上手。

打开文本编辑器并创建一个“ docker-compose.yaml  ”文件。粘贴下面提供的内容,保存并退出。

nano docker-compose.yaml代码语言: CSS (CSS )

version: '3.8' services: caddy: container_name: caddy image: caddy:alpine restart: always ports: - 80:80 - 443:443 networks: - reverse_proxy volumes: - ./Caddyfile:/etc/caddy/Caddyfile - caddy_data:/data - caddy_config:/config volumes: caddy_data: caddy_config: networks: reverse_proxy: external: true代码语言: PHP (php )

创建 Caddy 文件

现在,让我们准备“ Caddyfile ”配置,如上面的“ docker-compose.yaml ”文件所示,它直接从主机的本地目录挂载到Caddy容器中。

nano Caddyfile

{ auto_https off } rss.tmplinux.com:80 { reverse_proxy freshrss:80 } memos.tmplinux.com:80 { reverse_proxy memos:5230 }

这里的情况基本相似,但有一个显着的差异:应用程序通过其容器名称来标识。如果您不确定容器的确切名称,可以通过运行以下命令快速找到它:

docker ps --format '{{.Names}}'代码语言: JavaScript (javascript )

查找容器名称。

查找容器名称。

此外,示例中指定的端口(例如“ freshrss:80 ”或“ memos:5230  ”)不是容器在主机上映射到的端口。相反,它是容器内的应用程序侦听的端口。

将剩余容器链接到 Caddy 的 Docker 网络

再一次,Caddy 必须与其将请求重定向到的容器共享同一网络,以便能够与它们通信。这需要修改他们的部署。例如,我们对FreshRSS部署所做的调整包括添加“ reverse_proxy ”网络部分,如下所示:

确保在更改后重新启动容器。完成后,您就可以继续启动 Caddy 容器了:

docker-compose up -d

启动 Caddy 反向代理容器。

启动 Caddy 反向代理容器。

将您的浏览器定向到指定的地址,并在容器化环境中体验 Caddy 轻松的反向代理功能。

结论

对于寻求易于使用、安全且功能强大的反向代理解决方案的用户来说,Caddy 是一个绝佳的选择。

其简单的设置和自动管理 SSL 证书的能力使其成为比 Nginx 等传统 Web 服务器和 Traefik 等更复杂的替代方案更可取的选择,特别是对于重视简单性的用户而言。

将 Caddy 设置为反向代理可以显着简化管理和将流量重定向到您的服务。按照我们指南中概述的步骤,您可以快速配置 Caddy 以高效处理流量重定向。

最后,有关更多信息,请访问项目 文档 或其 网站。感谢您跟随我们的指南!如果您有任何疑问,请在下面的评论部分告诉我。



评论已关闭