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
- 上一篇:一键释放iOS 64位App潜力
- 下一篇:Base64编码转换工具,搞定编码难题
相关推荐
- Flutter状态管理之Provider数据共享的底层实现
-
#头条创作挑战赛#简介高级的Flutter工程师往往都是从最简单的架构开始研究学习,今天给大家带来的是Flutter中比较重要的状态管理框架Provider,也是每位Flutter开发者必学的框架。P...
- 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...
- 一周热门
-
-
C# 13 和 .NET 9 全知道 :13 使用 ASP.NET Core 构建网站 (1)
-
因果推断Matching方式实现代码 因果推断模型
-
git pull命令使用实例 git pull--rebase
-
git pull 和git fetch 命令分别有什么作用?二者有什么区别?
-
面试官:git pull是哪两个指令的组合?
-
git 执行pull错误如何撤销 git pull fail
-
git fetch 和git pull 的异同 git中fetch和pull的区别
-
git pull 之后本地代码被覆盖 解决方案
-
还可以这样玩?Git基本原理及各种骚操作,涨知识了
-
git命令之pull git.pull
-
- 最近发表
- 标签列表
-
- git pull (33)
- git fetch (35)
- mysql insert (35)
- mysql distinct (37)
- concat_ws (36)
- java continue (36)
- jenkins官网 (37)
- mysql 子查询 (37)
- python元组 (33)
- mysql max (33)
- vba instr (33)
- mybatis 分页 (35)
- vba split (37)
- redis watch (34)
- python list sort (37)
- nvarchar2 (34)
- mysql not null (36)
- hmset (35)
- python telnet (35)
- python readlines() 方法 (36)
- munmap (35)
- docker network create (35)
- redis 集合 (37)
- python sftp (37)
- setpriority (34)