社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  NGINX

Caddy 可做 Nginx 平替!且自动支持 HTTPS 证书

IT服务圈儿 • 2 月前 • 158 次点击  
来源丨经授权转自 古时的风筝(ID:gushidefengzheng)

作者风筝

Nginx 想必每一个开发都听说过吧,一个高性能的反向代理服务器和负载均衡器,同时也是一个轻量级的 Web 服务器,常用于处理并发连接和静态资源服务。

作为一个开发,在你拥有一台自己的服务器之前,可能只有极少数的人自己配置过 Nginx,大多数都停留在简单了解的层面上。

而当你有了自己的服务器后,初次使用 Nginx 大概率会觉得有点繁琐。但是繁琐也没有什么好方法,就是孰能生巧的事儿。以我的经验来讲,其他的配置都还好,复制粘贴基本上没什么问题,最烦人的地方就是HTTPS 协议的 SSL 证书。


但是还是有人觉得不够方便。如果纯站在技术角度的思考,Nginx 结合上面的两种自动证书续期的方式已经很方便了。但是,抛开技术不谈,我们有了自己的服务器要干什么呢,比如搭建个人博客、部署自己的产品,在这样的场景下,稳定快速的上线才是我们的最终目的,中间的环节当然是越快越简单最好了。

基于这样的目的来考虑,最方便的方式是让 Nginx 自动就支持 HTTPS,或者说自带证书,这样就最好了。

但是很可惜,Nginx 目前没有这样的功能,不过有另外一个产品既能当服务器又自带证书,那就是 Caddy。


Caddy

Caddy 和 Nginx 类似,也是 Web 服务器和反向代理服务器。在国内用的比较少,但是在国外很多知名产品都在用。

官网:https://caddyserver.com/

1、Caddy 的设计理念是“开箱即用”,默认内置 Let's Encrypt ,自动支持 HTTPS。并且自动处理 TLS 证书的获取和续订,减少了配置复杂度。

这就是上面说的 Nginx 的痛点,当你部署好 Caddy 时,就不用考虑购买证书、续订的事儿了。

2、Caddy 使用简单的 Caddyfile 作为配置文件,也就是Nginx中的 conf 配置文件,但是语法比 Nginx简洁很多。

下面是 Caddy 和 Nginx 配置的对比,Caddy 比 Nginx 简洁,而且Nginx要想支持 HTTPS,还要配置好几行,包括证书位置和使用的算法等。

更多的配置可到官网 https://caddyserver.com/docs/caddyfile 获取。

Caddy 配置,(自动启用 HTTPS,托管静态文件)

example.com {
root * /var/www/html
file_server
}

Nginx 配置

server {
listen 80;
server_name example.com;

location / {
root /var/www/html;
index index.html;
}
}

(默认使用 HTTP,若要启用 HTTPS,需要手动配置 ssl_certificate 和 ssl_certificate_key

3、和 Nginx 一样,Caddy 也有插件系统丰富,可动态加载模块。

4、支持 HTTP/3、反向代理、负载均衡和静态文件托管,并且Caddy 是第一款内置支持 HTTP/3 和 QUIC 的 Web 服务器


和 Nginx 的区别

Caddy 的性能虽然也不错,但在极端高负载环境中,通常表现略逊于 Nginx。Nginx 支持更广泛的 企业级场景,如复杂的负载均衡、缓存策略和请求限速。

对于小型项目或需要快速部署 HTTPS,Caddy 是一个不错的选择,比如我们的个人博客,自己做的产品。

对于大型企业级应用,Nginx 仍然是成熟的选择。


最后

如果你有自己部署服务的需求,不妨试试 Caddy。

只能说学习成本极低,部署效率极高,而且不用浪费精力搞 HTTPS 证书。

1、20k star! 让你在浏览器里直接体验 20 多种操作系统!

2、React 首次推出原生的动画支持!

2、SpringBoot项目保证接口幂等的五种方法!

4、突然忘记 Mysql 登陆密码,怎么办?

5、Python中的 if __name__ == '__main__' 是干嘛的?

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/178314
 
158 次点击