与Caddy一起使用HTTP / 2和php-fpm


概述

Caddy是启用了HTTP / 2的Web服务器。它不仅与Let \\'s Encrypt兼容,而且还具有自动生成自签名证书的功能,便于开发。它支持php-fpm,可用于开发PHP应用程序。 QUIC协议的实验工作也在进行中,其规范将于2018年发布。

在开发环境

中使用TLS的动机

这是通过增加与TLS接触的机会来加深您对TLS的了解。此外,通过使环境更接近操作环境,可以执行更多的验证。

安装

对于macOS,您可以使用自制软件安装它。

1
brew install caddy

可以使用

go命令安装。

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

安装

index.php

1
2
3
<?php

phpinfo();

在浏览器中访问https://localhost:2020以查看脚本结果是否已执行。

启用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是包装php-cgi的执行脚本。

phpwrap

1
2
3
#!/bin/bash

REDIRECT_STATUS=1 SCRIPT_FILENAME="${1}" /usr/local/bin/php-cgi -c /path/to/php-cgi.ini

路径的匹配结果存储在占位符{match}中。在上面的示例中,将{match}输入到env指令中的环境变量MATCH中以检查该值。 {match}

让我们以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兼容服务器的开发选项。请参阅本文以了解如何使用它。挑战在于它们可能不兼容。