常见Caddyfile模式

此页面演示了一些用于常见用例的完整和最小的Caddyfile配置。这些可能是你自己的Caddyfile文档的有用起点。

这些不是即插即用的解决方案;你将不得不自定义你的域名、端口/套接字、目录路径等。它们旨在说明一些最常见的配置模式。

Menu

静态文件服务器

  1. example.com
  2. root * /var/www
  3. file_server

像往常一样,第一行是站点地址。该root指令指定站点根目录的路径(*匹配所有请求的方法,以便与路径匹配器消除歧义);如果站点不是当前工作目录,则更改站点的路径。最后,我们启用静态文件服务器。

反向代理

代理所有的请求:

  1. example.com
  2. reverse_proxy localhost:5000

只代理以/api/开头的请求,并为其他所有内容提供静态文件:

  1. example.com
  2. root * /var/www
  3. reverse_proxy /api/* localhost:5000
  4. file_server

PHP

在运行PHP FastCGI服务的情况下,类似这样的内容适用于大多数现代PHP应用程序:

  1. example.com
  2. root * /var/www
  3. php_fastcgi /blog/* localhost:9000
  4. file_server

请对应地调整站点根目录和路径匹配器;此示例假定PHP仅位于/blog/子目录中——所有其他请求将作为静态文件提供。

php_fastcgi指令实际上只是几个配置的快捷方式。

重定向到www.子域名

T使用HTTP重定向,给域名添加www.子域。

  1. example.com {
  2. redir https://www.example.com{uri}
  3. }
  4. www.example.com {
  5. }

删除它:

  1. www.example.com {
  2. redir https://example.com{uri}
  3. }
  4. example.com {
  5. }

尾随斜杠

你通常不需要自己进行配置;该file_server指令将通过 HTTP 重定向自动添加或删除请求中的尾部斜杠,具体取决于请求的资源是目录还是文件。

但是,如果需要,你仍然可以在配置中强制使用斜杠。有两种方法可以做到:内部或外部。

内部执法

这使用rewrite指令。Caddy将在内部重写URI以添加或删除尾部斜杠:

  1. example.com
  2. rewrite /add /add/
  3. rewrite /remove/ /remove

使用重写,带有和不带有斜杠的请求将是相同的。

外部执行

这使用redir指令。Caddy 将要求浏览器更改 URI 以添加或删除尾部斜杠:

  1. example.com
  2. redir /add /add/
  3. redir /remove/ /remove

使用重定向,客户端将不得不重新发出请求,为资源强制执行一个可接受的URI。

通配符证书

如果你需要使用相同的通配符证书为多个子域提供服务,处理它们的最佳方法是使用如下所示的Caddyfile,利用handle指令和[host]host匹配器:

  1. *.example.com {
  2. tls {
  3. dns <provider_name> [<params...>]
  4. }
  5. @foo host foo.example.com
  6. handle @foo {
  7. respond "Foo!"
  8. }
  9. @bar host bar.example.com
  10. handle @bar {
  11. respond "Bar!"
  12. }
  13. # Fallback for otherwise unhandled domains
  14. handle {
  15. abort
  16. }
  17. }

请注意,你必须启用ACME DNS 质询才能让 Caddy 自动管理通配符证书。

单页面应用(SPAs)

当一个网页进行自己的路由时,服务器可能会收到大量的请求,这些请求并不存在于服务器端,但只要提供单一的索引文件,这些请求就可以在客户端呈现。这样架构的Web应用程序被称为SPA,或单页应用程序。

其主要思想是让服务器“尝试文件”来查看请求的文件在服务器端是否存在,如果不存在,则返回到一个索引文件,客户端在其中进行路由(通常使用客户端JavaScript):try_files {path} /index.html

最基本的SPA配置通常是这样的:

  1. example.com
  2. root * /path/to/site
  3. try_files {path} /index.html
  4. file_server

如果你的SPA与API或其他仅在服务器端使用的端点相结合,你会想要使用handle块来专门处理它们:

  1. example.com
  2. handle /api/* {
  3. reverse_proxy backend:8000
  4. }
  5. handle {
  6. root * /path/to/site
  7. try_files {path} /index.html
  8. file_server
  9. }