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

Caddy简单使用

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

环境: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

相关推荐

Flutter状态管理之Provider数据共享的底层实现

#头条创作挑战赛#简介高级的Flutter工程师往往都是从最简单的架构开始研究学习,今天给大家带来的是Flutter中比较重要的状态管理框架Provider,也是每位Flutter开发者必学的框架。P...

字节跨平台框架 Lynx 开源:一个 Web 开发者的原生体验

...

flutter软件开发笔记17-isolate的机制作用

这个isolate,相当于其他编程中的线程,并行处理一些事件,让程序更加高效。用厨房做菜的比喻帮你理解Isolate,附完整可运行的代码示例:一isolate的比喻解释假设你是一个主厨(主Isol...

七爪源码:如何使用 SQLite 数据库在 Flutter 中保存大数据

SQLite是一个开源、零配置、自包含、独立的事务关系数据库引擎,旨在嵌入到应用程序中。sqfliteFlutter的SQLite插件。支持iOS、Android和MacOS。支持事务...

Flutter 实现多语言

本文同步本人掘金平台的文章:https://juejin.cn/post/7164571616314130469我们在处理跨国业务、跨地区(比如港澳台)业务的时候,需要针对当地的语言来做兼容。所以,我...

开始第一个Flet应用

Flet是基于Flutter的UI框架,但是我们不需要熟悉Flutter,也不需要会前端,只要具备Python面向对象编程基础就可以了。当然我本人是不会Flutter的,所以也没法对比Flet和Flu...

《史记微软UI框架轮回本纪》

微软者,乃美地西雅图之枭雄,曾持Windows以令诸侯。自庚午(1990)以降,数易UI之术,然其UI之框架兴也勃焉,其亡也忽焉。太史公观其轮回之迹,未尝不掷笔长叹:天命固难测,然微软UI之败,岂非自...

Android中的数据库和本地存储在Flutter中是怎样实现的

如何使用SharedPreferences?在Android中,你可以使用SharedPreferencesAPI来存储少量的键值对。在Flutter中,使用Shared_Pref...

Flutter——输入部件

上一节介绍了文本部件,用于显示文本。但是在我们进行日常软件开发过程中,经常是需要获取用户键入的内容,比如用户名、密码、性别、喜好等等。...

我用VS Code 开发工具来开发 自己的 Flutter 应用 工具快而轻

本文将与你一起回顾如何在VSCode里进行Flutter应用的开发。1.安装和配置根据编辑工具设定的指引来安装Dart和Flutter扩展(也叫做插件)。1.1更新扩展程序...

Flutter 结合 Dio 使用

#头条创作挑战赛#上一篇文章...

Flutter——路由

路由(Route)在移动开发中通常指页面(Page),这跟Web开发中单页应用的Route概念意义是相同的,Route在Android中通常指一个Activity,在iOS中指一个...

Flutter 实战经验(五):在 VS Code 里开发 Flutter 应用

本文将与你一起回顾如何在VSCode里进行Flutter应用的开发。1.安装和配置根据编辑工具设定的指引来安装Dart和Flutter扩展(也叫做插件)。1.1更新扩展程序扩...

Flutter 2 的Windows 开发试验

刚安装了flutter2.1dev版本,测试下很感觉兴趣的Windows开发当前flutter环境为(flutterdoctor):Doctorsummary(toseeallde...

基于flutter/dart仿抖音app实例

简介flutter_tiktok项目是基于flutter+dart+fijkplayer等技术开发的仿抖音短视频app实例。https://github.com/mjl0602/flutter_tik...