讲师中心 微信公众号
AI工具推荐 视频效率加速

怎么配置 Apache 代理支持 WebSocket 的 Ping/Pong 心跳

云辰大大_1792

云辰大大_1792

发布时间:2026-07-17 13:53:37

|

515人浏览过

|

来源于php中文网

原创

Apache不处理WebSocket Ping/Pong帧,仅透传;后端必须显式响应,Apache需启用mod_proxy_wstunnel、设proxy_read_timeout/proxy_send_timeout≥心跳间隔×3、强制透传Upgrade/Connection头并禁用缓存。

怎么配置 apache 代理支持 websocket 的 ping/pong 心跳

Apache 本身不直接解析或透传 WebSocket 协议层的 Ping/Pong 帧(Opcode 0x9 / 0xA),它只负责 TCP 连接代理和 HTTP Upgrade 协商。真正的 Ping/Pong 处理必须由后端 WebSocket 服务(如 Node.js、FastAPI、Spring Boot)完成,Apache 只需确保这些控制帧能**无损透传**——不拦截、不缓冲、不超时中断。配置核心是让 Apache 正确升级连接,并延长空闲超时。

必须启用 mod_proxy_wstunnel 模块

这是 Apache 官方推荐的 WebSocket 代理模块(替代已弃用的 mod_websocket),专为 WS/WSS 设计,支持原生 Upgrade 透传:

  • 确认已加载:a2enmod proxy_wstunnel(Debian/Ubuntu)或检查 LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so
  • 该模块会自动识别 Upgrade: websocket 请求并切换为隧道模式,绕过常规 HTTP 处理链
  • 无需额外配置 Ping/Pong 行为——只要连接未断,帧就会原样转发

关键 Proxy 配置:防止静默断连

默认 Apache 超时极短(通常 60 秒),会直接切断“无数据”的长连接,导致心跳失效。需在 <VirtualHost> 或 Location 块中显式放宽:

Apache Superset Dashboard and SQL Exploration Skill
Apache Superset Dashboard and SQL Exploration Skill

Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。

下载
  • proxy_read_timeout 180 —— 必须 ≥ 心跳间隔 × 3(例如心跳 30 秒,则设为 90 或 180)
  • proxy_send_timeout 180 —— 匹配 read_timeout,避免服务端发 Pong 稍慢被掐
  • ProxySet keepalive=On —— 启用后端连接复用,减少握手开销
  • 完整示例:
    <Location "/ws">
    ProxyPass "ws://127.0.0.1:8080/ws"
    ProxyPassReverse "ws://127.0.0.1:8080/ws"
    ProxySet keepalive=On
    ProxySet timeout=180
    proxy_read_timeout 180
    proxy_send_timeout 180
    </Location>

强制 Upgrade 头透传(防中间设备丢帧)

某些防火墙或云网关会过滤非标准头。Apache 必须原样转发客户端发起的 Upgrade 请求:

  • ProxyPreserveHost On —— 保持原始 Host,避免后端路由错误
  • RequestHeader set Connection "upgrade" —— 显式设置 Connection 头(部分旧版 Apache 需此行)
  • RequestHeader set Upgrade "websocket" —— 确保 Upgrade 头不被覆盖
  • 禁用缓存:CacheDisable * 和 Header always set Cache-Control "no-store"

验证 Ping/Pong 是否真正透传

配置生效后,用抓包工具(如 Wireshark 或浏览器 DevTools 的 Network → WS Frames)确认:

  • 客户端发送的 Ping (0x9) 帧是否出现在后端日志或抓包中
  • 后端返回的 Pong (0xA) 帧是否能抵达浏览器(浏览器自动处理,不会触发 onmessage)
  • 若只看到应用层 {"type":"ping"} 消息而无 0x9/0xA 帧,说明后端未启用协议层心跳,此时 Apache 配置正确但依赖应用层逻辑

热门AI工具

更多
DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

相关专题

更多
Golang WebSocket与实时通信开发
Golang WebSocket与实时通信开发

本专题系统讲解 Golang 在 WebSocket 开发中的应用,涵盖 WebSocket 协议、连接管理、消息推送、心跳机制、群聊功能与广播系统的实现。通过构建实际的聊天应用或实时数据推送系统,帮助开发者掌握 如何使用 Golang 构建高效、可靠的实时通信系统,提高并发处理与系统的可扩展性。

175

2025.12.22

PHP WebSocket 实时通信开发
PHP WebSocket 实时通信开发

本专题系统讲解 PHP 在实时通信与长连接场景中的应用实践,涵盖 WebSocket 协议原理、服务端连接管理、消息推送机制、心跳检测、断线重连以及与前端的实时交互实现。通过聊天系统、实时通知等案例,帮助开发者掌握 使用 PHP 构建实时通信与推送服务的完整开发流程,适用于即时消息与高互动性应用场景。

396

2026.01.19

Python WebSocket实时通信与异步服务开发实践
Python WebSocket实时通信与异步服务开发实践

本专题聚焦 Python 在实时通信场景中的开发实践,系统讲解 WebSocket 协议原理、长连接管理、消息推送机制以及异步服务架构设计。内容包括客户端与服务端通信实现、连接稳定性优化、消息队列集成及高并发处理策略。通过完整案例,帮助开发者构建高效稳定的实时通信系统,适用于聊天应用、实时数据推送等场景。

615

2026.03.18

WebSocket 前端开发与实战技巧
WebSocket 前端开发与实战技巧

聚焦 WebSocket 在前端项目中的工程化实践,涵盖原生 JavaScript WebSocket 连接的封装与状态管理、Vue 3 中 WebSocket 的 Composable 封装(useWebSocket)、React 中自定义 Hook 管理连接生命周期、心跳检测(Ping/Pong 定时器)与自动断线重连的实现策略、指数退避重连算法、消息序列化协议(JSON / Protobuf / MessagePack)的选型与性

408

2026.05.25

WebSocket发送和接收数据教程合集
WebSocket发送和接收数据教程合集

本专题整合了WebSocket发送与接收数据教程合集,阅读专题下面的文章了解更多详细内容。

301

2026.05.25

apache是什么意思
apache是什么意思

Apache是Apache HTTP Server的简称,是一个开源的Web服务器软件。是目前全球使用最广泛的Web服务器软件之一,由Apache软件基金会开发和维护,Apache具有稳定、安全和高性能的特点,得益于其成熟的开发和广泛的应用实践,被广泛用于托管网站、搭建Web应用程序、构建Web服务和代理等场景。本专题为大家提供了Apache相关的各种文章、以及下载和课程,希望对各位有所帮助。

1055

2023.08.23

apache启动失败
apache启动失败

Apache启动失败可能有多种原因。需要检查日志文件、检查配置文件等等。想了解更多apache启动的相关内容,可以阅读本专题下面的文章。

11173

2024.01.16

Java 流式处理与 Apache Kafka 实战
Java 流式处理与 Apache Kafka 实战

本专题专注讲解 Java 在流式数据处理与消息队列系统中的应用,系统讲解 Apache Kafka 的基础概念、生产者与消费者模型、Kafka Streams 与 KSQL 流式处理框架、实时数据分析与监控,结合实际业务场景,帮助开发者构建 高吞吐量、低延迟的实时数据流管道,实现高效的数据流转与处理。

590

2026.02.04

LLVM自定义Pass怎么写
LLVM自定义Pass怎么写

本专题聚焦LLVM自定义Pass开发,整理Pass类结构、run()方法、PreservedAnalyses、CMake构建、插件注册、-load-pass-plugin加载和测试用例编写流程。

20

2026.09.30

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Apache Maven 官方安装指南
Apache Maven 官方安装指南

共0课时 | 0人学习

Apache Maven 官方用户中心
Apache Maven 官方用户中心

共0课时 | 0人学习

Apache Subversion 官方手册
Apache Subversion 官方手册

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn