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
配置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
配置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
解释和注释
docker run
:
- 启动一个新的 Docker 容器。
-d
:
- 以分离模式(后台运行)启动容器。
--name caddy
:
- 将容器命名为
caddy
。
-p 80:80
:
- 将主机的 80 端口映射到容器的 80 端口,用于 HTTP 流量。
-p 443:443
:
- 将主机的 443 端口映射到容器的 443 端口,用于 HTTPS 流量。
-p 443:443/udp
:
- 将主机的 443 端口映射到容器的 443 端口,使用 UDP 协议。这在某些情况下(如 QUIC 协议)很有用。
-v /home/web/caddy/:/etc/caddy/
:
- 将主机上的
/home/web/caddy/
目录挂载到容器的/etc/caddy/
目录。这样,容器中的 Caddy 可以使用主机上的配置文件。
-v /home/web/html/:/usr/share/caddy/
:
- 将主机上的
/home/web/html/
目录挂载到容器的/usr/share/caddy/
目录。这通常是 Caddy 用于提供静态文件的目录。
--restart=always
:
- 设置容器的重启策略为
always
,这样即使 Docker 守护进程重启或容器意外退出,容器也会自动重启。
caddy:latest
:
- 使用名为
caddy
的镜像的最新版本(latest
标签)来启动容器。
总结
该命令在后台启动一个名为 caddy
的 Caddy 服务器容器,映射主机的 80 和 443 端口,挂载主机的 Caddy 配置和静态文件目录,并设置容器自动重启策略。这种配置允许您在主机上管理 Caddy 的配置和内容,同时确保 Caddy 服务器能够处理 HTTP 和 HTTPS 请求。
重启caddy
docker restart caddy
Docker常见命令
Docker 是一种用于开发、部署和运行应用程序的开源平台。以下是一些常用的 Docker 命令及其用途:
Docker 镜像相关命令
- 拉取镜像
docker pull <image_name>:<tag>
例如,拉取最新的 Ubuntu 镜像:
docker pull ubuntu:latest
- 列出本地镜像
docker images
- 删除镜像
docker rmi <image_name>:<tag>
强制删除镜像:
docker rmi -f <image_name>:<tag>
Docker 容器相关命令
- 创建并运行容器
docker run -d --name <container_name> <image_name>:<tag>
例如,创建并运行一个名为 my_ubuntu
的容器:
docker run -d --name my_ubuntu ubuntu:latest
- 列出正在运行的容器
docker ps
- 列出所有容器(包括停止的)
docker ps -a
- 启动一个已停止的容器
docker start <container_name>
- 停止一个正在运行的容器
docker stop <container_name>
- 删除容器
docker rm <container_name>
强制删除正在运行的容器:
docker rm -f <container_name>
- 进入容器的交互式终端
docker exec -it <container_name> /bin/bash
Docker 网络相关命令
- 列出网络
docker network ls
- 创建网络
docker network create <network_name>
- 删除网络
docker network rm <network_name>
Docker Volumes 相关命令
- 列出卷
docker volume ls
- 创建卷
docker volume create <volume_name>
- 删除卷
docker volume rm <volume_name>
Docker Compose 相关命令
- 启动服务
在包含docker-compose.yml
文件的目录中运行:
docker-compose up -d
- 停止服务
docker-compose down
- 查看服务日志
docker-compose logs
其他常用命令
- 查看 Docker 版本
docker --version
- 查看 Docker 系统信息
docker info
- 查看容器日志
docker logs <container_name>
- 清理未使用的数据
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
}
验证
- 构建 Vue 项目:
npm run build
- 确认
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
- 在浏览器中访问您的服务器 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 会提供这些文件。
步骤
- 创建或更新 Caddyfile:
将上面的配置内容保存到/home/web/caddy/Caddyfile
文件中。 - 运行 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
- 验证配置:
通过浏览器访问服务器的 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 错误的问题。如果还有问题,请提供更多详细信息以便进一步分析和解决。
暂无评论内容