Caddy(轻量级web服务器)使用教程

Caddy 2是一款功能强大、企业级、开源 Web 服务器,具有用 Go 编写的自动 HTTPS。

docker安装

curl -fsSL https://get.docker.com | sh && ln -s /usr/libexec/docker/cli-plugins/docker-compose /usr/local/bin

创建Caddyfile和index.html

mkdir -p /home/web/{caddy,html}
touch /home/web/caddy/Caddyfile
touch /home/web/html/index.html
图片[1]曙光博客-随笔小窝Caddy(轻量级web服务器)使用教程曙光博客-随笔小窝曙光博客


配置index.html

https://github.com/kejilion/Website_source_code/blob/main/index.html
nano /home/web/html/index.html

配置Caddyfile

nano /home/web/caddy/Caddyfile
图片[2]曙光博客-随笔小窝Caddy(轻量级web服务器)使用教程曙光博客-随笔小窝曙光博客

配置IP访问的静态页面

###########################################################################订阅
#IP直接访问
http:// {
    # 配置反向代理
    reverse_proxy http://反代地址 {
        header_up Host 反代地址
        header_up X-Forwarded-Host {host}
        header_up X-Real-IP {remote}
        header_up X-Forwarded-For {remote}
        header_up X-Forwarded-Proto {scheme}
    }
    encode gzip
}

# 反向代理配置
域名 {
    reverse_proxy http://反代地址 {
        header_up Host 反代地址
        header_up X-Forwarded-Host {host}
        header_up X-Real-IP {remote}
        header_up X-Forwarded-For {remote}
        header_up X-Forwarded-Proto {scheme}
    }
    encode gzip
}
###########################################################################doc
docs.baidu.com {
    reverse_proxy http://127.0.0.1:10086 {
        header_up Host 127.0.0.1
        header_up X-Forwarded-Host {host}
        header_up X-Real-IP {remote}
        header_up X-Forwarded-For {remote}
        header_up X-Forwarded-Proto {scheme}
    }
    encode gzip
}
#########################################################################longzhu
# 反向代理配置
baidu.com {
    reverse_proxy http://v.baidu.com {
        header_up Host v.baidu.com
        header_up X-Forwarded-Host {host}
        header_up X-Real-IP {remote}
        header_up X-Forwarded-For {remote}
        header_up X-Forwarded-Proto {scheme}
    }
    encode gzip
}
#############################前端
# 反向代理配置
qilongzhu.top, 	idcbook.com {
    root * /usr/share/caddy
    file_server
    encode gzip
}
http:// {
root * /usr/share/caddy
  encode gzip
  file_server
}
##配置带域名的静态页面
kjlion.com {
root * /usr/share/caddy
encode gzip
file_server
}



##配置带域名的反向代理
wp.kjlion.com {
reverse_proxy 127.0.0.1:8080
encode gzip
}
##配置带域名的重定向
b.kjlion.com {
redir https://baidu.com{uri}
}


https://www.yuque.com/shuguang-rmnmb/pieed8/mua22rtumdvi38gi
##配置带域名的php动态站点
wp.kjlion.com {
root * /usr/share/caddy/wordpress
encode gzip
php_fastcgi php:9000
file_server
}

部署caddy

docker run -d --name caddy -p 80:80 -p 443:443 -p 443:443/udp -v /home/web/caddy/:/etc/caddy/ -v /home/web/html/:/usr/share/caddy/ --restart=always caddy:latest

以下是您提供的 docker run 命令的详细注释和含义:

docker run -d --name caddy -p 80:80 -p 443:443 -p 443:443/udp -v /home/web/caddy/:/etc/caddy/ -v /home/web/html/:/usr/share/caddy/ --restart=always caddy:latest

解释和注释

  1. docker run:
  • 启动一个新的 Docker 容器。
  1. -d:
  • 以分离模式(后台运行)启动容器。
  1. --name caddy:
  • 将容器命名为 caddy
  1. -p 80:80:
  • 将主机的 80 端口映射到容器的 80 端口,用于 HTTP 流量。
  1. -p 443:443:
  • 将主机的 443 端口映射到容器的 443 端口,用于 HTTPS 流量。
  1. -p 443:443/udp:
  • 将主机的 443 端口映射到容器的 443 端口,使用 UDP 协议。这在某些情况下(如 QUIC 协议)很有用。
  1. -v /home/web/caddy/:/etc/caddy/:
  • 将主机上的 /home/web/caddy/ 目录挂载到容器的 /etc/caddy/ 目录。这样,容器中的 Caddy 可以使用主机上的配置文件。
  1. -v /home/web/html/:/usr/share/caddy/:
  • 将主机上的 /home/web/html/ 目录挂载到容器的 /usr/share/caddy/ 目录。这通常是 Caddy 用于提供静态文件的目录。
  1. --restart=always:
  • 设置容器的重启策略为 always,这样即使 Docker 守护进程重启或容器意外退出,容器也会自动重启。
  1. caddy:latest:
  • 使用名为 caddy 的镜像的最新版本(latest 标签)来启动容器。

总结

该命令在后台启动一个名为 caddy 的 Caddy 服务器容器,映射主机的 80 和 443 端口,挂载主机的 Caddy 配置和静态文件目录,并设置容器自动重启策略。这种配置允许您在主机上管理 Caddy 的配置和内容,同时确保 Caddy 服务器能够处理 HTTP 和 HTTPS 请求。

重启caddy

docker restart caddy

Docker常见命令

Docker 是一种用于开发、部署和运行应用程序的开源平台。以下是一些常用的 Docker 命令及其用途:

Docker 镜像相关命令

  1. 拉取镜像
docker pull <image_name>:<tag>

例如,拉取最新的 Ubuntu 镜像:

docker pull ubuntu:latest
  1. 列出本地镜像
docker images
  1. 删除镜像
docker rmi <image_name>:<tag>

强制删除镜像:

docker rmi -f <image_name>:<tag>

Docker 容器相关命令

  1. 创建并运行容器
docker run -d --name <container_name> <image_name>:<tag>

例如,创建并运行一个名为 my_ubuntu 的容器:

docker run -d --name my_ubuntu ubuntu:latest
  1. 列出正在运行的容器
docker ps
  1. 列出所有容器(包括停止的)
docker ps -a
  1. 启动一个已停止的容器
docker start <container_name>
  1. 停止一个正在运行的容器
docker stop <container_name>
  1. 删除容器
docker rm <container_name>

强制删除正在运行的容器:

docker rm -f <container_name>
  1. 进入容器的交互式终端
docker exec -it <container_name> /bin/bash

Docker 网络相关命令

  1. 列出网络
docker network ls
  1. 创建网络
docker network create <network_name>
  1. 删除网络
docker network rm <network_name>

Docker Volumes 相关命令

  1. 列出卷
docker volume ls
  1. 创建卷
docker volume create <volume_name>
  1. 删除卷
docker volume rm <volume_name>

Docker Compose 相关命令

  1. 启动服务
    在包含 docker-compose.yml 文件的目录中运行:
docker-compose up -d
  1. 停止服务
docker-compose down
  1. 查看服务日志
docker-compose logs

其他常用命令

  1. 查看 Docker 版本
docker --version
  1. 查看 Docker 系统信息
docker info
  1. 查看容器日志
docker logs <container_name>
  1. 清理未使用的数据
docker system prune

这些命令涵盖了 Docker 日常操作的主要部分,掌握这些命令可以大大提升使用 Docker 的效率。

Caddy运行vue项目

要在 Caddy 上运行 Vue 前端项目,需要将编译后的静态文件(通常在 dist 目录中)提供给 Caddy 服务。以下是详细步骤:

1. 构建 Vue 项目

首先,确保您的 Vue 项目已编译。进入您的 Vue 项目根目录并运行构建命令:

npm run build

这将在项目根目录下生成一个 dist 目录,其中包含所有编译后的静态文件。

2. 准备 Caddyfile

创建或编辑您的 Caddyfile 来配置 Caddy 服务这些静态文件。假设您的 dist 目录在 /home/web/vue/dist 路径下,您可以像这样配置 Caddyfile

:80 {
    root * /usr/share/caddy
    file_server
}

将编译后的 Vue 项目文件放置在 /home/web/vue/dist 目录下。

3. 运行 Caddy 容器

运行 Caddy 容器,并将 dist 目录挂载到 Caddy 的静态文件目录:

docker run -d --name caddy -p 80:80 -p 443:443 -v /home/web/caddy/:/etc/caddy/ -v /home/web/vue/dist/:/usr/share/caddy/ --restart=always caddy:latest

详细注释

  • docker run -d --name caddy: 在后台运行一个名为 caddy 的容器。
  • -p 80:80 -p 443:443: 将主机的 80 和 443 端口映射到容器的 80 和 443 端口。
  • -v /home/web/caddy/:/etc/caddy/: 将主机上的 Caddy 配置文件目录挂载到容器内的 /etc/caddy/
  • -v /home/web/vue/dist/:/usr/share/caddy/: 将编译后的 Vue 项目静态文件目录挂载到容器内的 /usr/share/caddy/
  • --restart=always: 设置容器的重启策略为 always

示例 Caddyfile

将 Caddyfile 放在 /home/web/caddy/Caddyfile 路径下,内容如下:

:80 {
    root * /usr/share/caddy
    file_server
}

验证

  1. 构建 Vue 项目:
npm run build
  1. 确认 dist 目录中包含编译后的静态文件。
  2. 运行 Caddy 容器:
docker run -d --name caddy -p 80:80 -p 443:443 -v /home/web/caddy/:/etc/caddy/ -v /home/web/vue/dist/:/usr/share/caddy/ --restart=always caddy:latest
  1. 在浏览器中访问您的服务器 IP 或域名,确认能正确加载 Vue 项目。

通过以上步骤,您应该能够成功使用 Caddy 服务 Vue 前端项目。如果遇到问题,请检查 Caddy 容器日志:

docker logs caddy

确保没有配置错误并根据日志信息进行相应调整。

实现必须带参数请求出现这种情况的原因可能是 Caddy 的默认行为对于根目录的访问和带参数的路径访问的处理不同。我们可以通过调整 Caddyfile 配置来确保 Caddy 正确处理所有请求,包括不带参数的根路径请求。

解决方法

我们可以确保所有请求,包括根路径的请求,都能被正确处理。以下是调整后的 Caddyfile 配置示例:

:80 {
    # 设置根目录
    root * /usr/share/caddy

    # 配置反向代理
    reverse_proxy /* http://localhost:8080

    # 启用文件服务器(提供静态文件服务)
    file_server
}

解释

  • root * /usr/share/caddy: 设置根目录为 /usr/share/caddy,这个目录是挂载到容器内的静态文件目录。
  • reverse_proxy /* http://localhost:8080: 将所有请求代理到 http://localhost:8080,包括根路径 /
  • file_server: 启用文件服务器功能,这样如果根路径下有静态文件,Caddy 会提供这些文件。

步骤

  1. 创建或更新 Caddyfile:
    将上面的配置内容保存到 /home/web/caddy/Caddyfile 文件中。
  2. 运行 Caddy 容器:
    使用以下命令运行 Caddy 容器,确保正确挂载配置文件和静态文件目录:
docker run -d --name caddy -p 80:80 -p 443:443 -v /home/web/caddy/:/etc/caddy/ -v /home/web/vue/dist/:/usr/share/caddy/ --restart=always caddy:latest
  1. 验证配置:
    通过浏览器访问服务器的 IP 地址或域名,确认是否可以正确访问根路径和带参数的路径。如果遇到问题,可以查看 Caddy 容器的日志进行调试:
docker logs caddy

进一步调试

如果问题依然存在,可以通过以下方式进一步调试:

  • 检查容器内的文件: 进入 Caddy 容器,检查挂载的目录和文件是否正确:
docker exec -it caddy /bin/sh
ls /usr/share/caddy
  • 检查权限: 确保 /home/web/vue/dist 目录及其文件具有适当的读取权限:
sudo chmod -R 755 /home/web/vue/dist

通过以上步骤和调整,应该能够解决 Caddy 在反向代理配置中对于根路径访问返回 403 错误的问题。如果还有问题,请提供更多详细信息以便进一步分析和解决。

© 版权声明
THE END
喜欢就支持一下吧
点赞13赞赏 分享
评论 抢沙发

    暂无评论内容