百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT技术 > 正文

Caddy简单使用

wptr33 2025-01-07 16:17 16 浏览

环境:CentOS 7系统

Caddy官网:https://caddyserver.com/

1、安装

1.1、方式1:下载预编译的文件

# 1、下载
wget https://github.com/caddyserver/caddy/releases/download/v2.8.4/caddy_2.8.4_linux_amd64.tar.gz
 
# 2、解压
tar -xf caddy_2.8.4_linux_amd64.tar.gz
 
# 3、移动文件到/usr/local/bin/
mv caddy /usr/local/bin/
 
# 4、查看版本
caddy version
 
# 5、命令帮助
# 启动:caddy start 或者 caddy run
# 重启:caddy reload
# 停止:caddy stop
caddy
 
# 6、启动
# 6.1、前台运行
caddy run
 
# 或者
# 6.2、后台运行
# caddy start --config caddy.json
# caddy run --config nginx.conf --adapter nginx
# caddy run --config caddy.file --adapter caddyfile
caddy start

1.2、方式2:使用源码编译安装

安装go:

# 1、下载
# 下载地址:https://go.dev/dl/
wget https://go.dev/dl/go1.23.3.linux-amd64.tar.gz
 
# 2、解压
tar -xf go1.23.3.linux-amd64.tar.gz -C /usr/local/
 
# 3、添加环境变量
# 添加到环境变量,编辑/root/.bash_profile文件,内容如下: 
GO_PATH=/usr/local/go/bin
PATH=$PATH:$HOME/bin:$GO_PATH
export PATH
 
# 4、使环境变量生效
source /root/.bash_profile
 
# 5、查看版本
go version
 
# 6、配置goproxy
go env -w GOPROXY=https://goproxy.cn,direct

安装Caddy:

# 1、下载
git clone "https://github.com/caddyserver/caddy.git"
 
# 2、切换目录
cd caddy/cmd/caddy/
 
# 3、构建
go build
 
# 4、复制文件到/usr/local/bin/
cp caddy /usr/local/bin/
 
# 5、其他
caddy
 
# 6、启动
# 6.1、前台运行
caddy run
 
# 或者
# 6.2、后台运行
# caddy start --config caddy.json
# caddy run --config nginx.conf --adapter nginx
# caddy run --config caddy.file --adapter caddyfile
caddy start

2、命令说明

# 命令
caddy
 
# 显示内容如下
 
Caddy is an extensible server platform written in Go.
 
At its core, Caddy merely manages configuration. Modules are plugged
in statically at compile-time to provide useful functionality. Caddy's
standard distribution includes common modules to serve HTTP, TLS,
and PKI applications, including the automation of certificates.
To run Caddy, use:
	- 'caddy run' to run Caddy in the foreground (recommended).
	- 'caddy start' to start Caddy in the background; only do this
	  if you will be keeping the terminal window open until you run
	  'caddy stop' to close the server.
When Caddy is started, it opens a locally-bound administrative socket
to which configuration can be POSTed via a restful HTTP API (see
https://caddyserver.com/docs/api).
Caddy's native configuration format is JSON. However, config adapters
can be used to convert other config formats to JSON when Caddy receives
its configuration. The Caddyfile is a built-in config adapter that is
popular for hand-written configurations due to its straightforward
syntax (see https://caddyserver.com/docs/caddyfile). Many third-party
adapters are available (see https://caddyserver.com/docs/config-adapters).
Use 'caddy adapt' to see how a config translates to JSON.
 
For convenience, the CLI can act as an HTTP client to give Caddy its
initial configuration for you. If a file named Caddyfile is in the
current working directory, it will do this automatically. Otherwise,
you can use the --config flag to specify the path to a config file.
 
Some special-purpose subcommands build and load a configuration file
for you directly from command line input; for example:
 
	- caddy file-server
	- caddy reverse-proxy
	- caddy respond
 
These commands disable the administration endpoint because their
configuration is specified solely on the command line.
 
In general, the most common way to run Caddy is simply:
 
	$ caddy run
 
Or, with a configuration file:
 
	$ caddy run --config caddy.json
 
If running interactively in a terminal, running Caddy in the
background may be more convenient:
 
	$ caddy start
	...
	$ caddy stop
 
This allows you to run other commands while Caddy stays running.
Be sure to stop Caddy before you close the terminal!
 
Depending on the system, Caddy may need permission to bind to low
ports. One way to do this on Linux is to use setcap:
 
	$ sudo setcap cap_net_bind_service=+ep $(which caddy)
 
Remember to run that command again after replacing the binary.
 
See the Caddy website for tutorials, configuration structure,
syntax, and module documentation: https://caddyserver.com/docs/
 
Custom Caddy builds are available on the Caddy download page at:
https://caddyserver.com/download
 
The xcaddy command can be used to build Caddy from source with or
without additional plugins: https://github.com/caddyserver/xcaddy
 
Where possible, Caddy should be installed using officially-supported
package installers: https://caddyserver.com/docs/install
 
Instructions for running Caddy in production are also available:
https://caddyserver.com/docs/running
 
Usage:
  caddy [command]
 
Examples:
  $ caddy run
  $ caddy run --config caddy.json
  $ caddy reload --config caddy.json
  $ caddy stop
 
Available Commands:
  adapt          Adapts a configuration to Caddy's native JSON
  add-package    Adds Caddy packages (EXPERIMENTAL)
  build-info     Prints information about this build
  completion     Generate completion script
  environ        Prints the environment
  file-server    Spins up a production-ready file server
  fmt            Formats a Caddyfile
  hash-password  Hashes a password and writes base64
  help           Help about any command
  list-modules   Lists the installed Caddy modules
  manpage        Generates the manual pages for Caddy commands
  reload         Changes the config of the running Caddy instance
  remove-package Removes Caddy packages (EXPERIMENTAL)
  respond        Simple, hard-coded HTTP responses for development and testing
  reverse-proxy  A quick and production-ready reverse proxy
  run            Starts the Caddy process and blocks indefinitely
  start          Starts the Caddy process in the background and then returns
  stop           Gracefully stops a started Caddy process
  storage        Commands for working with Caddy's storage (EXPERIMENTAL)
  trust          Installs a CA certificate into local trust stores
  untrust        Untrusts a locally-trusted CA certificate
  upgrade        Upgrade Caddy (EXPERIMENTAL)
  validate       Tests whether a configuration file is valid
  version        Prints the version
 
Flags:
  -h, --help      help for caddy
  -v, --version   version for caddy
 
Use "caddy [command] --help" for more information about a command.
 
Full documentation is available at:
https://caddyserver.com/docs/command-line

3、配置

3.1、方式1:命令行

详见:https://caddyserver.com/docs/command-line

caddy file-server(静态文件服务器):

# 参考:https://caddyserver.com/docs/command-line#caddy-file-server
 
# 命令
caddy file-server
	[-r, --root <path>]
	[--listen <addr>]
	[-d, --domain <example.com>]
	[-b, --browse]
	[--reveal-symlinks]
	[-t, --templates]
	[--access-log]
	[-v, --debug]
	[--no-compress]
	[-p, --precompressed]
 
# 示例
caddy file-server -r /usr/local/nginx/html -b

caddy respond(http服务器):

# 参考:https://caddyserver.com/docs/command-line#caddy-respond
 
# 命令
caddy respond
	[-s, --status <code>]
	[-H, --header "<Field>: <value>"]
	[-b, --body <content>]
	[-l, --listen <addr>]
	[-v, --debug]
	[--access-log]
	[<status|body>]
 
# 示例
caddy respond --listen :2000-2004 "I'm server {{.N}} on port {{.Port}}"

caddy reverse-proxy(http反向代理):

# 参考:https://caddyserver.com/docs/command-line#caddy-reverse-proxy
 
# 命令
caddy reverse-proxy
	[-f, --from <addr>]
	(-t, --to <addr>)
	[-H, --header-up "<Field>: <value>"]
	[-d, --header-down "<Field>: <value>"]
	[-c, --change-host-header]
	[-r, --disable-redirects]
	[-i, --internal-certs]
	[-v, --debug]
	[--access-log]
	[--insecure]
 
# 示例
# ----------from----------:
caddy respond --listen :2024 "I'm server {{.N}} on port {{.Port}}"
 
# ----------to----------:
# 当前浏览器访问8080端口,反向代理到2024端口
caddy reverse-proxy -t :2024 -f :8080

3.2、方式2:JSON文件

详见:https://caddyserver.com/docs/json/

1)编写caddy.json文件

{
	"apps": {
		"http": {
			"servers": {
				"example": {
					"listen": [":2015"],
					"routes": [
						{
							"handle": [{
								"handler": "static_response",
								"body": "Hello, world!"
							}]
						}
					]
				}
			}
		}
	}
}

2)加载配置

# 参考:https://caddyserver.com/docs/getting-started
 
# 1、上传文件
curl localhost:2019/load -H "Content-Type: application/json" -d @caddy.json
 
# 2、查看配置
curl localhost:2019/config/

3)访问站点

curl localhost:2015

3.3、方式3:Caddyfile文件

详见:https://caddyserver.com/docs/quick-starts/caddyfile

1)编写Caddyfile文件

:5566 {
	# 指定root为nginx的html目录
	root * /usr/local/nginx/html
	file_server
 
	log {
		output file /var/log/access.log
	}
 
	handle /halo/ {
		respond "hello world"
	}
 
	handle_path /local-nginx/* {
		# 代理本地nginx服务
		reverse_proxy localhost
	}
 
	handle_path /local-php/* {
		# 访问php项目
		root * /usr/local/nginx/html
		php_fastcgi localhost:9000
		file_server
	}
 
	handle /jump-csdn/ {
		# 重定向
		redir http://www.csdn.net/
	}
 
	handle_path /proxy-csdn/* {
		# 反向代理
		reverse_proxy https://www.csdn.net
	}
}
 
:6060 {
	reverse_proxy localhost
}
 
:7070 {
	redir http://www.baidu.com
}

2)加载配置

方式1:使用caddy start启动时,同时加载配置的情况

# 1、启动并加载配置
caddy start --config Caddyfile --adapter caddyfile
 
# 2、查看配置
curl localhost:2019/config/

注:如果不确定是否已启动caddy服务,使用ps aux | grep caddy命令查看。如果存在,使用caddy stop命令或者使用kill 进程id来停止服务。

方式2:caddy服务已经启动,使用curl命令上传文件的情况

# 参考:https://caddyserver.com/docs/quick-starts/caddyfile
 
# 1、上传文件
curl localhost:2019/load -H "Content-Type: text/caddyfile" --data-binary @Caddyfile
 
# 2、重启
caddy reload
 
# 3、查看配置
curl localhost:2019/config/

方式3:caddy服务已经启动,使用caddy adapt加载配置的情况

# 参考:https://caddyserver.com/docs/getting-started
 
# 1、加载配置
# 假设Caddyfile文件在/path/to目录下
# caddy adapt --config /path/to/Caddyfile
# 如果caddy adapt命令不指定--config参数,默认加载当前路径下的Caddyfile文件
caddy adapt
 
# 2、重启
caddy reload
 
# 3、查看配置
curl localhost:2019/config/

3)访问站点

# 浏览器访问以下地址:
# 其中:localhost替换成当前的 ip 或 域名
# localhost:5566/
# localhost:5566/halo/
# localhost:5566/local-nginx/
# localhost:5566/local-php/
# localhost:5566/jump-csdn/
# localhost:5566/proxy-csdn/
# localhost:6060/
# localhost:7070/

3.4、方式4:Nginx文件

详见:https://caddyserver.com/docs/config-adapters

1)安装xcaddy

# 参考:https://github.com/caddyserver/xcaddy#install
 
# 1、下载
wget https://github.com/caddyserver/xcaddy/releases/download/v0.4.4/xcaddy_0.4.4_linux_amd64.tar.gz
 
# 2、解压
tar -xf xcaddy_0.4.4_linux_amd64.tar.gz
 
# 3、移动文件到/usr/local/bin/
mv xcaddy /usr/local/bin/
 
# 4、查看版本
xcaddy version

2)安装nginx-adapter

# 参考:https://github.com/caddyserver/nginx-adapter
 
# 1、安装
xcaddy build --with github.com/caddyserver/nginx-adapter
 
# 2、移动文件到/usr/local/bin/
mv caddy /usr/local/bin/

3)编写Nginx配置文件

# 相关文档:
# https://github.com/caddyserver/nginx-adapter/
# https://github.com/caddyserver/nginx-adapter/blob/master/testdata/example1.conf
# https://github.com/caddyserver/nginx-adapter/blob/master/testdata/example2.conf
 
# 以下为nginx.conf配置内容:
 
http {
  server {
    listen 8080;
    location / {
      proxy_pass http://127.0.0.1:2024;
    }
  }
}

其中2024端口:

# 执行命令
caddy respond --listen :2024 "I'm server {{.N}} on port {{.Port}}"

4)检查配置文件

caddy validate -c nginx.conf -a nginx

5)加载配置

# 方式1:启动并加载配置
# caddy run --config nginx.conf --adapter nginx
# caddy start --config nginx.conf --adapter nginx
 
caddy start --config nginx.conf --adapter nginx
 
# 或者
# 方式2:caddy服务已经启动,使用curl命令上传文件
# 2.1、上传文件:
# curl localhost:2019/load -H "Content-Type: text/nginx" --data-binary @nginx.conf
# 2.2、重启:
# caddy reload
# 2.3、查看配置
# curl localhost:2019/config/ 

6)访问站点

# 浏览器访问以下地址:
# 其中:localhost替换成当前的 ip 或 域名
# localhost:8080/

4、参考

  • https://caddyserver.com/
  • https://caddyserver.com/docs/getting-started
  • https://github.com/caddyserver/caddy/tree/master/caddytest/integration/caddyfile_adapt

相关推荐

【推荐】一款开源免费、美观实用的后台管理系统模版

如果您对源码&技术感兴趣,请点赞+收藏+转发+关注,大家的支持是我分享最大的动力!!!项目介绍...

Android架构组件-App架构指南,你还不收藏嘛

本指南适用于那些已经拥有开发Android应用基础知识的开发人员,现在想了解能够开发出更加健壮、优质的应用程序架构。首先需要说明的是:AndroidArchitectureComponents翻...

高德地图经纬度坐标批量拾取(高德地图批量查询经纬度)

使用方法在桌面上新建一个index.txt文件,把下面的代码复制进去保存,再把文件名改成index.html保存,双击运行打开即可...

flutter系列之:UI layout简介(flutter ui设计)

简介对于一个前端框架来说,除了各个组件之外,最重要的就是将这些组件进行连接的布局了。布局的英文名叫做layout,就是用来描述如何将组件进行摆放的一个约束。...

Android开发基础入门(一):UI与基础控件

Android基础入门前言:...

iOS的布局体系-流式布局MyFlowLayout

iOS布局体系的概览在我的CSDN博客中的几篇文章分别介绍MyLayout布局体系中的视图从一个方向依次排列的线性布局(MyLinearLayout)、视图层叠且停靠于父布局视图某个位置的框架布局(M...

TDesign企业级开源设计系统越发成熟稳定,支持 Vue3 / 小程序

TDesing发展越来越好了,出了好几套组件库,很成熟稳定了,新项目完全可以考虑使用。...

WinForm实现窗体自适应缩放(winform窗口缩放)

众所周知,...

winform项目——仿QQ即时通讯程序03:搭建登录界面

上两篇文章已经对CIM仿QQ即时通讯项目进行了需求分析和数据库设计。winform项目——仿QQ即时通讯程序01:原理及项目分析...

App自动化测试|原生app元素定位方法

元素定位方法介绍及应用Appium方法定位原生app元素...

61.C# TableLayoutPanel控件(c# tabcontrol)

摘要TableLayoutPanel在网格中排列内容,提供类似于HTML元素的功能。TableLayoutPanel控件允许你将控件放在网格布局中,而无需精确指定每个控件的位置。其单元格...

想要深入学习Android性能优化?看完这篇直接让你一步到位

...

12个python数据处理常用内置函数(python 的内置函数)

在python数据分析中,经常需要对字符串进行各种处理,例如拼接字符串、检索字符串等。下面我将对python中常用的内置字符串操作函数进行介绍。1.计算字符串的长度-len()函数str1='我爱py...

如何用Python程序将几十个PDF文件合并成一个PDF?其实只要这四步

假定你有一个很无聊的任务,需要将几十个PDF文件合并成一个PDF文件。每一个文件都有一个封面作为第一页,但你不希望合并后的文件中重复出现这些封面。即使有许多免费的程序可以合并PDF,很多也只是简单的将...

Python入门知识点总结,Python三大数据类型、数据结构、控制流

Python基础的重要性不言而喻,是每一个入门Python学习者所必备的知识点,作为Python入门,这部分知识点显得很庞杂,内容分支很多,大部分同学在刚刚学习时一头雾水。...