Caddy一键部署,配置反向代理,申请免费HTTPS证书

Scroll Down

来源:NanCheung`s Blog
链接:https://blog.nancheung.com /archives/984096
商业转载请联系作者获得授权,非商业转载请注明出处。



我一直觉得作为一个自用的微型vps,没必要使用nginx这种复杂的web服务端。我以前一直使用goflyway,它是一个使用Golang编写的自带反代理功能的隧道HTTP隧道代理工具。但是goflyway的反代理功能太弱了。这次我替换了一个更好的工具——Caddy。

什么是caddy

Caddy服务器是一个开源的,使用 Golang 编写,支持 HTTP/2 的 Web 服务端。它使用Golang 标准库提供HTTP 功能。 Caddy 一个显著的特性是默认启用HTTPS。它是第一个无需额外配置即可提供HTTPS 特性的Web 服务器。

简单的说,caddy是一个配置简单、默认支持https特性的web服务端。

注意

本文所有指令前都加上了sudo,如果你是root用户,可以省去sudo。

如何安装Caddy

一、使用官方一键脚本安装

curl https://getcaddy.com | bash -s personal

安装完毕后,执行 which caddy 可以看到,caddy已经被安装到了 /usr/local/bin/caddy中。

二、配置caddy

  1. 创建配置文件放到 /etc/caddy 目录

    Caddy 的配置文件叫做 Caddyfile,我们一般放在 /etc/caddy

    	sudo mkdir /etc/caddy
    	sudo touch /etc/caddy/Caddyfile
    	sudo chown -R root:www-data /etc/caddy
    
  2. 配置ssl证书目录

    caddy 会自动生成 ssl 证书,需要一个文件夹放置 ssl 证书

    	sudo mkdir /etc/ssl/caddy
    	sudo chown -R www-data:root /etc/ssl/caddy
    	sudo chmod 0770 /etc/ssl/caddy
    
  3. 配置 systemd

    了解更多systemd的知识

    将caddy使用systemd配置成为一个服务,方便管理,并且开机自启动。Caddy配置systemd的官方文档

    	sudo curl -s https://raw.githubusercontent.com/mholt/caddy/master/dist/init/linux-systemd/caddy.service -o /etc/systemd/system/caddy.service
    	sudo systemctl daemon-reload
    	sudo systemctl enable caddy.service
    	sudo systemctl status caddy.service
    

    以上四条命令的意义依次分别是:

    1. 从 github 下载 systemd 配置文件放到systemd的启动文件目录下
    2. 重新加载 systemd 配置
    3. 设置 caddy 服务自启动
    4. 查看 caddy 状态

三、配置

此处只以本站的配置为例,更高阶更详细的配置应该看看 Caddy文档

  1. 编辑Caddyfile

    打开Caddyfile文件,上文配置的路径是:/etc/caddy/Caddyfile

  2. 加入反代理配置

    	#第一行一定是你的访问地址
    	blog.nancheung.com {
    		gzip
    		#此处配置一个任意邮箱,caddy会自动帮你申请免费ssl证书
    		tls [email protected]
    
    		#这里是配置你需要转发到哪里
    		proxy / localhost:8888 {
    			transparent
    		}
    	}
    

    上例是一个简单的代理服务配置。第一行为自己的域名,tls后面加上邮箱会自动申请let’sencrypt ssl证书。

  3. 重启caddy使配置生效

    	sudo systemctl restart caddy.service
    

四、管理caddy的指令

  1. 启动caddy

    	sudo systemctl start caddy.service
    
  2. 停止caddy

    	sudo systemctl stop caddy.service
    
  3. 重启caddy

    	sudo systemctl restart caddy.service
    

相关资料

官网:https://caddyserver.com/
GitHub:https://github.com/mholt/caddy
Caddy中文文档:https://dengxiaolong.com/caddy/zh/