我愿称它为最强!Caddy2替代Nginx方案!

前言

作为一个天天学习的好同学,我相信你也一定知道Caddy

如果还不知道,可以自挂东南枝了=。=

简单说一下优缺点吧

优点:备案过的域名可以自动签证,无需单独购买和配置https证书!配置简单!性能高!

缺点:底层是go语言,网上相关资料特别是Caddyfile的配置案例比较少。


好了,话不多说。

今天我要分享的是用Caddy2做代理,以及做图片服务器。

配置

首先,基于docker

第一步,在 /etc/caddy 目录下创建Caddyfile文件,并添加以下配置

www.aaaa.com { log { output stdout } file_server /images/* { root / } reverse_proxy /aaa-api/* aaa-api:8081 reverse_proxy /bbb-admin/* bbb-admin:8080 tls aaa@163.com }

创建容器

第二步,docker-compose创建caddy2容器以及你自己的项目容器

version: '2' services: #aaa-api aaa-api: container_name: aaa-api image: aaa-api:v20211008001 restart: unless-stopped networks: - default ports: - "8081:8081" volumes: - "/data/www/market/images:/data/www/market/images" environment: spring_profiles_active: test TZ: Asia/Shanghai logging: driver: "json-file" options: max-size: "10m" max-file: "3" #bbb-admin bbb-admin: container_name: bbb-admin image: bbb-admin:v20211008001 restart: unless-stopped networks: - default volumes: - "/data/www/market/images:/data/www/market/images" ports: - "8080:8080" environment: spring_profiles_active: test TZ: Asia/Shanghai logging: driver: "json-file" options: max-size: "10m" max-file: "3" # caddy caddy: container_name: caddy image: caddy restart: unless-stopped networks: - default environment: ACME_AGREE: "true" ports: - "80:80" - "443:443" volumes: - "/etc/caddy/Caddyfile:/etc/caddy/Caddyfile" - "/data/www/market/images:/images" logging: driver: "json-file" options: max-size: "10m" max-file: "3" #mariadb mariadb: container_name: mariadb image: mariadb restart: unless-stopped networks: - default ports: - "3306:3306" environment: MYSQL_ROOT_PASSWORD: market@33223344 volumes: - "/data/mysql/data:/var/lib/mysql" logging: driver: "json-file" options: max-size: "10m" max-file: "3" #redis redis: container_name: redis image: redis restart: unless-stopped networks: - default ports: - "9987:6379" volumes: - "/data:/data/redis/data" - "/data/redis/conf:/etc/redis" logging: driver: "json-file" options: max-size: "10m" max-file: "3" networks: default: driver: bridge

说明

重点说明一下caddy的配置:

1.关于代理,我的项目都有上下文路径的,所以 reverse_proxy 代理后面匹配的是上下文路径(注意一定要加/*),如:https://www.aaa.com/aaa-api/login.html,空格 后面接容器名和容器的启动端口

2.关于图片,我的访问方式是:https://www.aaa.com/images/20211009/asdfasdf.jpg,所以file_server 后面匹配 /images/*root 则代表文件的根目录,注意,这是caddy容器内的路径,所以在添加caddy容器的时候需要映射你的图片文件夹路径到容器内,我的root / 是因为我把宿主机的图片映射到了caddy容器内的 /images

2022.02.09补充,如果代理存在多个且存在无匹配校验的代理,代理的逻辑是匹配最佳匹配项,在file_server匹配后,会继续匹配无匹配项的代理,导致文件无法访问404,所以需要使用@name标签和not path 指令

www.aaaa.com { log { output stdout } file_server /images/* { root / } reverse_proxy /aaa/* aaa-api:8081 reverse_proxy /bbb/* bbb-admin:8080 @path not path /images/* /aaa/* /bbb/* reverse_proxy @path ccc-name tls aaa@163.com }

记录:caddy的docker-compose

version: '2' services: caddy2: container_name: caddy2 image: caddy restart: on-failure ports: - "443:443" - "443:443/udp" - "80:80" volumes: - "/mnt/caddy2/config:/config" - "/mnt/caddy2/Caddyfile:/etc/caddy/Caddyfile" - "/mnt/caddy2/data:/data" - "/data/www/cert:/cert" networks: - monitor environment: TZ: "Asia/Shanghai" logging: driver: "json-file" options: max-size: "100m" max-file: "3" networks: monitor: external: name: myNetwork

总结

关于caddy2的简单使用,我就主要提到了file_serverreverse_proxy 两个指令。更多操作可以看看文档:https://caddyserver.com/docs/

额外增加了 @name not path三个指令。遇到问题还是多看官方文档吧!很有用

瑞思拜!


__EOF__

本文作者KURO · Liang
本文链接https://www.cnblogs.com/kuro-liang/articles/15386949.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   KURO、Liang  阅读(5141)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示