当前位置: 首页 > 后端技术 > Java

超越Nginx!号称下一代Web服务器,够优雅好用!

时间:2023-04-01 16:23:51 Java

Nginx是一个非常流行的网络服务器,在Github上有16K+星。我们经常将其用于静态资源托管或反向代理。最近,发现了一个全新的Web服务器Caddy。Star数超过Nginx,star数38K+Star。我试用了Caddy,发现它比Nginx优雅和强大得多。我把它推荐给了每一个人!SpringBoot实战电商项目商城(50k+star)地址:https://github.com/macrozheng/mallCaddy简介Caddy是一个功能强大、扩展性高的web服务器,目前在Github上有38K+star。Caddy是用Go语言编写的,可用于静态资源托管和反向代理。Caddy具有以下主要特点:与Nginx的复杂配置相比,其原有的Caddyfile配置非常简单;它可以通过它提供的AdminAPI动态修改配置;默认支持HTTPS自动配置,可以自动申请和配置HTTPS证书;可扩展至数万个站点;可以在任何地方执行而无需额外的依赖;Go语言编写,内存安全更有保障。安装首先,我们直接在CentOS8上安装Caddy,使用DNF工具安装无疑是最简单的。后面会介绍Docker的安装方法。使用以下命令通过DNF工具安装Caddy。安装成功后,Caddy会被注册为系统服务;dnfinstall'dnf-command(copr)'dnfcoprenable@caddy/caddydnfinstallcaddy使用systemctlstatuscaddy查看Caddy的状态,可以发现Caddy已经注册为系统服务,但是还没有启动。下面通过使用来体验一下Caddy的基本使用。是web服务器的常用操作,绝对可以用!基本使用首先,让我们从Caddy开始,让Caddy在2015端口上运行并返回Hello,world!。直接使用caddy命令会输出Caddy的常用命令。基本上看了介绍就知道怎么用了,标注的都是常用命令;使用caddystart命令让Caddy服务在后台运行;Caddy默认使用JSON格式的配置文件,但是由于用JSON格式编写配置比较麻烦,Caddyfile作为一种更简洁的配置形式提供。使用如下命令可以自动将Caddyfile转成JSON配置;对于caddy适配器,我们可以先创建一个名为Caddyfile的文件。文件内容如下,然后使用caddy适配器将其转换成JSON配置,然后使用caddyreload使配置生效。配置将监听端口2015并返回Hello,world!;:2015respond"Hello,world!"然后我们使用curl命令访问localhost:2015,返回指定的信息;当然,我们也可以使用Caddy提供的AdminAPI来查看配置信息,只需要使用以下命令;curllocalhost:2019/config/当前json配置如下,如果直接使用json配置,需要写如下配置,用caddyfile真的很方便!{“apps”:{“http”:{“servers”:{“srv0”:{“listen”:[“:2015”],“routes”:[{“handle”:[{“body”:“你好,世界!”,“处理程序”:“static_response”}]}]}}}}Caddyfile基本语法以下示例将使用Caddyfile进行配置。我们需要了解它的语法。Caddyfile的具体语法规则如下,对上图中的关键字进行介绍,有助于理解。关键字解释使用全局选项块服务器全局配置可用于配置是否启用HTTPS和AdminAPI等。单个网站配置可以通过file_server配置。可以配置静态代理通过reverse_proxy可以配置动态代理Matcher定义匹配定义。默认情况下,该命令将产生全局影响。通过它,可以指定影响范围。注释以#符号开头。站点地址默认使用HTTPS。启用HTTP需要指定以http://开头的指令指令,赋予了Caddy强大的反向代理功能。反向代理意味着当请求访问您的代理服务器时,代理服务器会将您的请求转发到静态资源路径或动态资源路径。服务接口就起来了。下面以域名代理为例,说说如何进行静态代理和动态代理。静态代理静态代理就是将请求代理到不同的静态资源路径。这里我们把对docs.macrozheng.com的请求代理到我的文档项目,把对mall.macrozheng.com的请求代理到商城的前端项目。.首先我们修改本机的host文件:192.168.3.106docs.macrozheng.com192.168.3.106mall.macrozheng.com然后将我们的文档工程和mall前端工程上传到Caddy的html目录下,进行解压操作:修改caddyfile文件,使用如下配置,修改后使用caddyreload命令刷新配置;http://docs.macrozheng.com{root*/mydata/caddy/html/docsfile_serverbrowse}http://mall.macrozheng.com{root*/mydata/caddy/html/mallfile_serverbrowse}如果你的Caddyfile文件格式不合格,会出现如下警告,直接使用caddyfmt--overwrite格式化重写配置即可解决;通过docs.macrozheng.com可以访问部署的文档项目:部署的前端项目可以通过mall.macrozheng.com访问。动态代理动态代理就是将代理服务器的请求转发给另一个服务。这里我们将对api.macrozheng.com的请求代理到demo环境的API服务。首先,我们修改本机的host文件,添加如下规则:192.168.3.106api.macrozheng.com修改Caddyfile文件,使用如下配置。修改完成后,使用caddyreload命令刷新配置;http://api.macrozheng.com{reverse_proxyhttp://admin-api.macrozheng.com}后,可以通过api.macrozheng.com/swagger-ui.html访问mall-admin的API文档页面。文件压缩如果我们的服务器带宽比较低,网站访问速度会很慢。这个时候我们可以让Caddy开启Gzip压缩来提高网站访问速度。这里以商城前端项目为例,演示其提速效果。我们需要修改Caddyfile文件,使用encode命令开启Gzip压缩,修改后使用caddyreload命令刷新配置;http://mall.macrozheng.com{root*/mydata/caddy/html/mallencode{gzip}file_serverbrowse}有一个比较大的JS文件,压缩前1.7M;压缩后是544K,访问速度也是一个大提醒;另外,我们可以看看响应信息。如果响应头中有Content-Encoding:gzip,说明开启了Gzip压缩。地址重写有时我们的网站已经更改了域名,但有些用户仍然使用旧域名访问。这时候可以利用Caddy的地址重写功能,让用户跳转到新的域名进行访问。我们需要修改Caddyfile文件,使用redir命令改写地址,修改后使用caddyreload命令刷新配置;http://docs.macrozheng.com{redirhttp://www.macrozheng.com}现在访问老域名docs.macrozheng.com会直接跳转到www.macrozheng.com。按目录划分有时候我们需要使用同一个域名来访问不同的前端项目。这时候我们就需要通过子目录来区分前端项目。比如我们需要按照如下路径访问各个前端项目;www.macrozheng.com#访问文档项目www.macrozheng.com/admin#访问后台项目www.macrozheng.com/app#访问手机项目我们需要修改Caddyfile文件,使用route命令定义路由,使用caddyreload命令刷新修改后的配置。http://www.macrozheng.com{route/admin/*{uristrip_prefix/adminfile_server{root/mydata/caddy/html/admin}}route/app/*{uristrip_prefix/appfile_server{root/mydata/caddy/html/app}}file_server*{root/mydata/caddy/html/www}}HTTPSCaddy可以自动支持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/docsfile_serverbrowse}然后用caddyrun命令启动Caddy服务器,是不是很方便!caddyrunDockersupport当然,Caddy也支持使用Docker进行安装使用,这和直接在CentOS上安装基本是一样的。首先使用如下命令下载Caddy的Docker镜像;dockerpullcaddy然后在/mydata/caddy/目录下创建一个Caddyfile配置文件,文件内容如下;http://192.168.3.105:80回复“你好,世界!”之后,使用如下命令启动caddy服务,其中将宿主机上的Caddyfile配置文件、Caddy数据目录和网站目录挂载到容器中;dockerrun-p80:80-p443:443--namecaddy\-v/mydata/caddy/Caddyfile:/etc/caddy/Caddyfile\-v/mydata/caddy/data:/data\-v/mydata/caddy/html:/usr/share/caddy\-dcaddy后,使用dockerexec进入caddy容器内部执行命令;dockerexec-itcaddy/bin/sh输入Caddy命令进行操作,后面的操作和我们在CentOS上直接安装是一样的。总结今天,我体验了Caddy。其强大的命令功能让我们无需冗余配置即可实现各种功能。用起来确实很优雅!特别是它可以自动配置HTTPS,非常棒!Caddy基本可以实现Nginx可以实现的功能。大家可以对照一下之前写的Nginx使用教程,就会发现使用Caddy来实现是多么的优雅!参考项目地址:https://github.com/caddyserve...官方文档:https://caddyserver.com/