高度关注“JAVA爱家”,与一百万开发人员在一同
倘若转发请联络原社会公众号
Nginx是这款十分盛行的Web伺服器,在Github上已近16K+Star,他们时常用它来做静态天然资源代销或逆向全权。前段时间辨认出了这款崭新的Web伺服器Caddy,Star数胜过Nginx,标星38K+Star。试玩了呵呵Caddy,辨认出它采用出来比Nginx典雅多了,机能也很强悍,所推荐给我们!
Caddy概要
Caddy是这款采用方便,可扩展性高的Web伺服器,现阶段在Github上已近38K+Star。Caddy选用Go词汇撰写,可用作静态天然资源代销和逆向全权。
Caddy具备如下表所示主要就优点:
对照Nginx繁杂的实用性,其独有的Caddyfile实用性比较简单;能透过其提供更多的Admin API同时实现静态修正实用性;预设全力支持智能化HTTPS实用性,能手动提出申请HTTPS合格证书并展开实用性;能扩展到数以千计的公交站点;能在任一地方性继续执行,没附加的倚赖;选用Go词汇撰写,缓存安全可靠更有确保。加装
具体来说他们间接在CentOS 8上加装Caddy,采用DNF工具加装无疑是最简单的,Docker安装方式之后也会介绍。
采用如下表所示命令透过DNF工具加装Caddy,加装成功后Caddy会被注册成系统服务;dnf install dnf-command(copr)dnf copr enable@caddy/caddy
dnf install caddy
采用systemctl status caddy查看Caddy的状态,能辨认出Caddy已被注册为系统服务,但是还没开启。采用
下面他们体验下Caddy的基本采用,对于Web伺服器来说都是常用的操作,你准能用的上!
基本采用
具体来说他们来个Caddy的入门采用,让Caddy运行在2015端口上并返回Hello, world!。
间接采用caddy命令将输出Caddy的常用命令,基本看介绍就知道如何采用了,标出来的是常用命令;Caddy预设采用JSON格式的实用性文件,但由于JOSN格式实用性书写比较麻烦,又提供更多了Caddyfile这种更加简洁的实用性形式,采用如下表所示命令能手动把Caddyfile转化为JSON实用性;caddy adapter
他们能先创建一个名称为Caddyfile的文件,文件内容如下表所示,然后采用caddy adapter将它转换为JSON实用性,再采用caddy reload使实用性生效,该实用性将监听2015端口,并返回Hello, world!;:2015
respond “Hello, world!”然后他们采用curl命令访问localhost:2015,将返回指定的信息;当然他们还能采用Caddy提供更多的Admin API来查看实用性信息,采用如下表所示命令即可;curl localhost:2019/config/
当前JSON实用性如下表所示,如果你间接采用JSON实用性的话需要书写如下表所示实用性,采用Caddyfile确实方便很多!{
“apps”: {
“http”: {
“servers”: {
“srv0”: {
“listen”: [“:2015”],
“routes”: [{
“handle”: [{
“body”: “Hello, world!”,
“handler”: “static_response”}]
}]
}
}
}
}
}
Caddyfile基本语法
下面案例将采用Caddyfile来展开实用性,他们有必要了解下它的语法,Caddyfile的具体语法规则如下表所示。逆向全权
逆向全权就是当请求访问你的全权伺服器时,全权伺服器会对你的请求展开转发,能转发到静态的天然资源路径上去,也能转发到静态的服务接口上去。下面他们以对域名展开全权为例,来讲讲如何展开静态全权和静态全权。
静态全权静态全权就是将请求全权到不同的静态天然资源路径上去,这里他们将对docs.macrozheng.com的请求全权到我的文档项目中,对mall.macrozheng.com的请求全权到mall的前端项目中。
具体来说他们修正下本机的host文件:192.168.3.106 docs.macrozheng.com
192.168.3.106 mall.macrozheng.com
然后将他们的文档项目和mall前端项目上传到Caddy的html目录中去,并展开解压操作:修正Caddyfile文件,采用如下表所示实用性,修正完成后采用caddy reload命令刷新实用性;http://docs.macrozheng.com {
root * /mydata/caddy/html/docs
file_server browse
}
http://mall.macrozheng.com {
root * /mydata/caddy/html/mall
file_server browse
}
如果你的Caddyfile文件格式不太合格的话,会出现如下表所示警告,间接采用caddy fmt –overwrite格式化并重写实用性即可解决;静态全权就是把全权伺服器的请求转发到另一个服务上去,这里他们将把对api.macrozheng.com的请求全权到演示环境的API服务上去。
具体来说他们修正下本机的host文件,添加如下表所示规则:192.168.3.106 api.macrozheng.com
修正Caddyfile文件,采用如下表所示实用性,修正完成后采用caddy reload命令刷新实用性;http://api.macrozheng.com {
reverse_proxy http://admin-api.macrozheng.com
}
之后透过api.macrozheng.com/swagger-ui.html即可访问到mall-admin的API文档页面了。文件压缩
如果他们的伺服器带宽比较低,网站访问速度会很慢,这时他们能透过让Caddy开启Gzip压缩来提高网站的访问速度。这里他们以mall的前端项目为例来演示下它的提速效果。
他们需要修正Caddyfile文件,采用encode指令开启Gzip压缩,修正完成后采用caddy reload命令刷新实用性;http://mall.macrozheng.com {
root * /mydata/caddy/html/mall
encode {
gzip
}
file_server browse
}
有个比较大的JS文件压缩前是1.7M;地址重写
有的时候他们的网站更换了域名,但还有用户在采用老的域名访问,这时能透过Caddy的地址重写机能来让用户跳转到新的域名展开访问。
他们需要修正Caddyfile文件,采用redir指令重写地址,修正完成后采用caddy reload命令刷新实用性;http://docs.macrozheng.com {
redir http://www.macrozheng.com
}
此时访问旧域名docs.macrozheng.com会间接跳转到www.macrozheng.com去。按目录划分
有时候他们需要采用同一个域名来访问不同的前端项目,这时候就需要透过子目录来区分前端项目了。
比如说他们需要按以下路径来访问各个前端项目;www.macrozheng.com #访问文档项目www.macrozheng.com/admin #访问后台项目www.macrozheng.com/app#访问移动端项目他们需要修正Caddyfile文件,采用route指令定义路由,修正完成后采用caddy reload命令刷新实用性。http://www.macrozheng.com {
route /admin/* {
uri strip_prefix /admin
file_server {
root /mydata/caddy/html/admin
}
}
route /app/* {
uri strip_prefix /app
file_server {
root /mydata/caddy/html/app
}
}
file_server * {
root /mydata/caddy/html/www
}
}
HTTPS
Caddy能手动全力支持HTTPS,无需手动实用性合格证书,这就是之前他们在实用性域名时需要采用http://开头的原因,要想采用Caddy预设的HTTPS机能,按如下表所示步骤操作即可。
具体来说他们需要修正域名的DNS解析,间接在购买域名的网站上设置即可,这里以docs.macrozheng.com域名为例;
之后采用如下表所示命令验证DNS解析记录是否正确,注意实用性的伺服器的80和443端口需要在外网能正常访问;
curl “https://cloudflare-dns.com/dns-query?name=docs.macrozheng.com&type=A”\
-H “accept: application/dns-json”修正Caddyfile实用性文件,展开如下表所示实用性;docs.macrozheng.com {
root * /mydata/caddy/html/docs
file_server browse
}
然后采用caddy run命令启动Caddy伺服器即可,是不是十分方便!caddy run
Docker全力支持
当然Caddy也是全力支持采用Docker展开加装采用的,其采用和间接在CentOS上加装基本一致。
具体来说采用如下表所示命令下载Caddy的Docker镜像;docker pull caddy
然后在/mydata/caddy/目录下创建Caddyfile实用性文件,文件内容如下表所示;http://192.168.3.105:80
respond “Hello, world!”之后采用如下表所示命令启动caddy服务,这里将宿主机上的Caddyfile实用性文件、Caddy的数据目录和网站目录挂载到了容器中;docker run -p 80:80 -p 443:443 –name caddy \
-v /mydata/caddy/Caddyfile:/etc/caddy/Caddyfile \
-v /mydata/caddy/data:/data \
-v /mydata/caddy/html:/usr/share/caddy \
-d caddy
之后采用docker exec进入caddy容器内部继续执行命令;dockerexec-it caddy /bin/sh
输入Caddy命令即可操作,之后的操作就和他们间接在CentOS上加装一样了。总结
今天体验了一把Caddy,其强悍的指令机能,让他们无需多余的实用性即可实现各种机能,采用出来确实十分典雅!尤其是其能手动实用性同时实现HTTPS,十分不错!Nginx能同时实现的机能Caddy基本都能同时实现,我们能对照下之前写的Nginx采用教程,你就会辨认出采用Caddy来同时实现有多么典雅!
参考资料
项目地址:https://github.com/caddyserver/caddy官方文档:https://caddyserver.com/<END>
程序员专属T恤
商品直购链接 👇JAVA爱家严选 , 交易担保 , 放心买 , 程序员极客短袖T恤 小程序
所推荐阅读:
万字多图,搞懂 Nginx 高性能网络工作原理!这篇Nginx逆向全权技巧,助你准时下班陪女神
看完这篇还不懂Nginx伺服器实用性,那我要哭了~