概述
Caddy是启用了HTTP / 2的Web服务器。它不仅与Let \\'s Encrypt兼容,而且还具有自动生成自签名证书的功能,便于开发。它支持php-fpm,可用于开发PHP应用程序。 QUIC协议的实验工作也在进行中,其规范将于2018年发布。
在开发环境
中使用TLS的动机
这是通过增加与TLS接触的机会来加深您对TLS的了解。此外,通过使环境更接近操作环境,可以执行更多的验证。
安装
对于macOS,您可以使用自制软件安装它。
1 | brew install caddy |
可以使用
1 | go get github.com/mholt/caddy/caddy |
在安装由社区分发的非标准插件时,请从下载页面的左侧菜单中检查要安装的插件列表,然后下载Caddy。
配置文件
将以下内容保存在配置文件的Caddyfile中。
1 2 3 | localhost:2020 tls self_signed fastcgi / 127.0.0.1:9000 php |
使用HTTP / 2时需要TLS。各种项目的配置文件示例在caddyserver / examples中发布。
开始
在
Caddyfile所在的目录中执行以下命令。
1 | caddy |
安装
1 2 3 | <?php phpinfo(); |
在浏览器中访问
启用QUIC
启动服务器时可以启用QUIC。截至2016年,这是一个试验功能。
1 | caddy -quic |
基准
如果要对支持HTTP / 2的服务器进行基准测试,则基准测试工具还必须支持HTTP / 2。使用nghttp2随附的h2load时,请按以下方式指定命令选项。
1 | h2load -n 100000 -c 1 -m 1 https://localhost:2020/ |
您可以使用
homebrew安装nghttp2。
1 | brew install nghttp2 |
用作CGI
您也可以通过安装
http.cgi插件将PHP作为CGI运行。考虑与其他语言结合使用。 Caddyfile的示例如下所示:
球童档案
1 2 3 4 5 6 7 8 | localhost:2020 tls self_signed cgi { match /*.php exec /path/to/phpwrap /path/to/{match} env MATCH={match} } |
phpwrap
1 2 3 | #!/bin/bash REDIRECT_STATUS=1 SCRIPT_FILENAME="${1}" /usr/local/bin/php-cgi -c /path/to/php-cgi.ini |
路径的匹配结果存储在占位符
让我们以Python作为另一种语言的示例。
球童档案
1 | cgi /*.cgi /path/to/{match} |
python.cgi
1 2 3 | #!/usr/bin/env python3 print("Content-Type: text/plain; charset=utf-8\n") print("Hello World") |
另一个例子是Lua。允许省略Shebang的设置如下。
测试
1 | cgi /*.lua /usr/local/bin/lua /path/to/{match} |
Lua的CGI脚本编写如下。
测试
1 2 | print("Content-type: text/plain; charset=utf-8\n") print("Hello World") |
目标用户
根据
常见问题解答,Caddy的目标是降低Web服务器使用率的门槛,并且有用于为设计师和作家设置静态网站和WordPress的教??程。未来的开发计划包括用于远程管理的API和基于Web的控制面板。
社区评分
在Hacker News上讨论。根据评估文章,性能不如Nginx,因此在生产环境中部署它时,您需要考虑使用Go开发的好处。 Gist已发布,总结了PHP生产环境的体系结构配置和配置示例。 Wiki上有一个有关如何扩展Caddy的摘要。 HTTP中间件被用作扩展机制。
身份验证功能是近年来HTTP服务器趋势的关注重点。在某些情况下,以前以服务器端语言实现的功能(例如Oauth和JWT)被实现为服务器功能。 Lua和mruby用作服务器的内置语言。另一个示例是正在使用的TLS功能(例如令牌绑定)的使用。
其他服务器选项
HHVM是用于HTTP / 2兼容服务器的开发选项。请参阅本文以了解如何使用它。挑战在于它们可能不兼容。