当前位置: 首页 > news >正文

利用Caddy实现http反向代理

利用Caddy实现http反向代理

1 Caddy是什么

Caddy是一个开源的,使用Golang编写的,支持HTTP/2的Web服务端。它的一个显著特征就是默认启用HTTPS。

和nginx类似。

2 多个后端服务

假如现在有3个后端http服务:分别在启动在

app1

http://10.0.0.1:8080GET /
GET /ping

app2

http://10.0.0.2:8080GET /
GET /ping

app3

http://10.0.0.3:8080GET /
GET /ping

3 Caddyfile

localhost {# localhost/app1/ping -> http://10.0.0.1:8080/pingroute /app1/* {uri strip_prefix /app1reverse_proxy http://10.0.0.1:8080}route /app2/* {uri strip_prefix /app2reverse_proxy http://10.0.0.2:8080}route /app3/* {uri strip_prefix /app3reverse_proxy http://10.0.0.3:8080}
}

Tips

uri strip_prefix /app1的作用是将url中的/app1给去掉然后转发到reverse_proxy上去。

启动caddy

$> caddy run

此时使用curl或者浏览器访问

$> curl -v http://localhost/app1/ping
$> curl -v http://localhost/app2/ping
$> curl -v http://localhost/app3/ping

则caddy会分别反向代理到app1、app2、app3上。

4 启用HTTPS

自签证书

本地测试的时候需要安装本地信任机构CA并且自签证书,需要借助mkcert工具

$> brew install mkcert

安装CA到本机

$> mkcert -install

为主机自签证书

$> mkcert example.org

会在当前目录生成example.org.pemexample.org-key.pem这两个文件

配置Hosts

在hosts文件里添加

127.0.0.1 		example.org

此时访问example.org就会访问到本机的127.0.0.1

在Caddyfile中添加tls

example.org {tls /Users/example.org.pem  /Users/example.org-key.pem# example.org/app1/ping -> http://10.0.0.1:8080/pingroute /app1/* {uri strip_prefix /app1reverse_proxy http://10.0.0.1:8080}route /app2/* {uri strip_prefix /app2reverse_proxy http://10.0.0.2:8080}route /app3/* {uri strip_prefix /app3reverse_proxy http://10.0.0.3:8080}
}

需要注意的是tls配置的 xx.pemxx-key.pem文件是绝对路径。

重启caddy

相关文章:

  • 网络安全深入学习第八课——代理与端口转发
  • 【FastCAE源码阅读7】视图方向切换按钮实现原理
  • 【论文阅读】多模态NeRF:Cross-Spectral Neural Radiance Fields
  • LeetCode(1)合并两个有序数组【数组/字符串】【简单】
  • k8s持久化存储PV、PVC
  • 【Ruoyi管理后台】用户登录强制修改密码
  • Linux awk命令
  • 百度上线“文心一言”付费版本,AI聊天机器人市场竞争加剧
  • docker下的nginx代理转发到tomcat
  • 自然语言处理中的文本聚类:揭示模式和见解
  • Python+reuqests自动化接口测试
  • yolov5 利用Labelimg对图片进行标注
  • VR虚拟现实:VR技术如何进行原型制作
  • 数字滤波器设计---FIR 滤波器设计
  • 基于SSM的中学课内小说阅读与学习系统的设计与实现
  • 【Redis学习笔记】2018-06-28 redis命令源码学习1
  • 230. Kth Smallest Element in a BST
  • C++回声服务器_9-epoll边缘触发模式版本服务器
  • Linux编程学习笔记 | Linux多线程学习[2] - 线程的同步
  • mongodb--安装和初步使用教程
  • SpiderData 2019年2月13日 DApp数据排行榜
  • 产品三维模型在线预览
  • 函数式编程与面向对象编程[4]:Scala的类型关联Type Alias
  • 回流、重绘及其优化
  • 猫头鹰的深夜翻译:JDK9 NotNullOrElse方法
  • 三栏布局总结
  • 思考 CSS 架构
  • # 学号 2017-2018-20172309 《程序设计与数据结构》实验三报告
  • #免费 苹果M系芯片Macbook电脑MacOS使用Bash脚本写入(读写)NTFS硬盘教程
  • %3cscript放入php,跟bWAPP学WEB安全(PHP代码)--XSS跨站脚本攻击
  • (06)金属布线——为半导体注入生命的连接
  • (14)学习笔记:动手深度学习(Pytorch神经网络基础)
  • (39)STM32——FLASH闪存
  • (arch)linux 转换文件编码格式
  • (c语言版)滑动窗口 给定一个字符串,只包含字母和数字,按要求找出字符串中的最长(连续)子串的长度
  • (Matlab)基于蝙蝠算法实现电力系统经济调度
  • (Matlab)使用竞争神经网络实现数据聚类
  • (Redis使用系列) Springboot 整合Redisson 实现分布式锁 七
  • (zz)子曾经曰过:先有司,赦小过,举贤才
  • (附源码)springboot建达集团公司平台 毕业设计 141538
  • (附源码)ssm航空客运订票系统 毕业设计 141612
  • (附源码)ssm基于微信小程序的疫苗管理系统 毕业设计 092354
  • (六)软件测试分工
  • ******IT公司面试题汇总+优秀技术博客汇总
  • .NET Core 控制台程序读 appsettings.json 、注依赖、配日志、设 IOptions
  • .NET Core工程编译事件$(TargetDir)变量为空引发的思考
  • .net websocket 获取http登录的用户_如何解密浏览器的登录密码?获取浏览器内用户信息?...
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)
  • .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验
  • .net中的Queue和Stack
  • @RequestParam详解
  • @基于大模型的旅游路线推荐方案
  • [ IOS ] iOS-控制器View的创建和生命周期
  • []串口通信 零星笔记
  • [20170705]lsnrctl status LISTENER_SCAN1