HAProxy 实现 h2 到 h2c 的解析

HAProxy 实现 h2 到 h2c 的解析名词解释 h2 指的是建立在 LTS 之上的 HTTP 2 协议 即 HTTP 2OverLTS h2c 指的是建立在 TCP 之上的 HTTP 2 协议 即 HTTP 2OverTCP HAProxy 配置关键在于接受前端的 h2 请求 以及转发到后端的 h2c 请求 请看关键配置 frontendfe example test 下面一行指定了 1 监听当前

名词解释

HAProxy 配置

关键在于接受前端的 h2 请求,以及转发到后端的 h2c 请求,请看关键配置:

frontend fe_example_test # 下面一行指定了: # 1. 监听当前机器的 443 端口 # 2. 使用 ssl,且证书为 /etc/haproxy/ssl/g4n32u.xyz.pem,协商协议为 ALPN # 3. HTTP 版本为 2,即 h2 bind *:443 ssl crt /etc/haproxy/ssl/g4n32u.xyz.pem alpn h2 mode http # 指定入口是 http 模式 default_backend be_example_test backend be_example_test mode http # 指定转发到后端是 http 模式 # 下面一行指定了: # 1. 后端应用别名:backend_server # 2. 后端应用的地址和端口号 # 3. 转发到后端使用的协议,这里是 h2(即h2c),因为流量已被 HAProxy 解密 server backend_server 127.0.0.1:60002 proto h2 

关于 HTTPS 证书

如果你的证书像我一样是用 acme.sh 生成的,那要注意一下 HAProxy 对证书格式的要求和 Nginx 略有区别。对于 Nginx 来说,使用 acme.sh 生成的 fullchain-file 即可,但是对于 HAProxy,你必须将证书和私钥合并起来,也就是将 acme.sh 生成的 cert-file 和 key-file 合并起来,用命令描述上面这句话就是:

acme.sh --installcert -d example.com \ --cert-file /etc/haproxy/ssl/example.com.cer \ --key-file /etc/haproxy/ssl/example.com.key \ --fullchain-file /etc/haproxy/ssl/example.com.fullchain.cer \ --reloadcmd "cat /etc/haproxy/ssl/example.com.cer /etc/haproxy/ssl/example.com.key | tee /etc/haproxy/ssl/example.com.pem && systemctl restart haproxy" 

我注意到在目录 ~/.acme.sh/example.com/ 这个目录下,存在 example.com.pem,里面已经包含了证书和密钥合并的结果,但是 acme.sh 并没有提供安装该文件的命令入口。所以只能退而求其次的在 --reloadcmd 命令中拼接。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/198504.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月26日 下午3:04
下一篇 2026年3月26日 下午3:04


相关推荐

  • Enterprise Library5.0 配置Log时差问题

    Enterprise Library5.0 配置Log时差问题最近使用EnterpriseLibrary5.0配置Log日志时候出现的默认时间与本地系统时间不一致。默认时间为格里尼治时间,在一个log中出现两个时间会让人迷惑,这个事件到底是什么时候发生的呢?经过小弟我一上午多次尝试后,总算是解决了这个问题。解决方法:在LogMessageFormatters->Template->将Timestamp:{timestamp}{newline}

    2022年10月20日
    4
  • java 转换成string_java中int类型转换成String类型的三种方法

    java 转换成string_java中int类型转换成String类型的三种方法int gt Stringinti 12345 Strings 第一种方法 s i 第二种方法 s String valueOf i 这两种方法有什么区别呢 作用是不是一样的呢 是不是在任何下都能互换呢 String gt ints 12345 inti 第一种方法 i Integer parseInt s 第二种方法 i Integer valueOf s

    2026年3月16日
    2
  • UOS AI接入讯飞星火新版本

    UOS AI接入讯飞星火新版本

    2026年3月14日
    1
  • Vue上传图片_实现线程的四种方式

    Vue上传图片_实现线程的四种方式项目中需要上传图片可谓是经常遇到的需求,本文将介绍3种不同的图片上传方式,在这总结分享一下,有什么建议或者意见,请大家踊跃提出来。没有业务场景的功能都是耍流氓,那么我们先来模拟一个需要实现的业务场景。假设我们要做一个后台系统添加商品的页面,有一些商品名称、信息等字段,还有需要上传商品轮播图的需求。我们就以Vue、Element-ui,封装组件为例子聊聊如何实现这个功能。其他框架或者不用框架…

    2022年8月15日
    11
  • css颜色代码表_汽车颜色代码在哪里

    css颜色代码表_汽车颜色代码在哪里颜色值CSS颜色使用组合了红绿蓝颜色值(RGB)的十六进制(hex)表示法进行定义。对光源进行设置的最低值可以是0(十六进制00)。最高值是255(十六进制FF)。从0到255种红绿蓝值能够组合出总共超过一千六百万种不同的颜色(根据256x256x256计算)。十六进制值使用三个双位数来编写,并以#符号开头。如下:#FFFFFF #DDDD…

    2025年7月28日
    7
  • mac adb环境变量配置

    mac adb环境变量配置1 找到 mac 下 adb 的路径 在 cmd 命令下 首先说一下命令的用法 nbsp touchfilenam 常用用法 touchfilenam 如果 filename 存在 使用 touch 指令可更改这个文件或目录的日期时间 包括存取时间和更改时间 如果 filename 不存在 touch 指令会在当前目录下新建一个空白文件 filename 1 touch bash profile

    2026年3月19日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号