news 2026/8/4 7:27:17

Nginx WebSocket 长连接及数据容量配置

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Nginx WebSocket 长连接及数据容量配置

WebSocket 协议是实现实时通信的关键技术。相比于传统的 HTTP 请求-响应模式,WebSocket 提供了双向、持久化的通信方式。Nginx 作为一个高性能的反向代理服务器,可以非常有效地处理 WebSocket 连接,但要正确处理 WebSocket 长连接和传输大数据,必须进行一些特定的配置。

1.WebSocket 连接的基本概念

WebSocket 协议是基于 HTTP 协议的,它在客户端和服务器之间建立了一条持久化的、全双工的通信通道。在 WebSocket 建立连接后,客户端和服务器可以随时向对方发送消息,而不需要像传统的 HTTP 请求那样重复建立连接。

Nginx 的作用通常是充当反向代理,它将 WebSocket 请求转发给后端应用服务器。因此,在配置 WebSocket 时,需要特别注意以下几点:

  • WebSocket 的连接是持久化的,可能会存在较长的生命周期。
  • WebSocket 数据传输速度可能较快,传输的数据包可能比较大。
  • 默认的 Nginx 配置不一定适合 WebSocket 长连接,因此需要进行相应的优化。
2.Nginx 配置 WebSocket 代理

Nginx 本身并不直接支持 WebSocket 协议,但它可以通过 HTTP 代理将 WebSocket 请求转发到后端应用服务器。要使 Nginx 支持 WebSocket,关键是配置反向代理时保持 HTTP 协议升级(Upgrade)和连接(Connection)的头部。

以下是配置 Nginx 作为 WebSocket 代理的基本步骤。

2.1配置 WebSocket 代理

在 Nginx 中,要支持 WebSocket,最重要的配置是正确设置 Upgrade和 Connection请求头,确保 WebSocket 协议的握手能够正常进行。你可以在 nginx.conf中的 location块中添加以下配置:

server { ????listen 80; ????server_name your-domain.com; ????location /ws/ { ????????proxy_pass http://your_backend_server; ?# 后端 WebSocket 服务地址 ????????proxy_http_version 1.1; ?# 使用 HTTP/1.1 协议,WebSocket 需要支持 HTTP/1.1 ????????proxy_set_header Upgrade $http_upgrade; ?# WebSocket 升级头部 ????????proxy_set_header Connection 'upgrade'; ?# 保持连接活跃 ????????proxy_set_header Host $host; ?# 转发原始 Host 头 ????????proxy_cache_bypass $http_upgrade; ?# 避免缓存 WebSocket 请求 ????} }
2.2解释配置项
  • proxy_http_version 1.1;:WebSocket 协议需要基于 HTTP/1.1,因此需要显式指定 HTTP 版本为 1.1。
  • proxy_set_header Upgrade $http_upgrade;:WebSocket 握手需要进行协议升级(Upgrade)。通过此配置将客户端请求中的 Upgrade头部转发给后端应用服务器。
  • proxy_set_header Connection ‘upgrade’;:指定连接升级,确保 WebSocket 连接正常建立。
  • proxy_set_header Host $host;:传递客户端的 Host 头,保持请求的原始主机头信息。
  • proxy_cache_bypass $http_upgrade;:避免缓存 WebSocket 请求,因为 WebSocket 是一个持久连接,不能被缓存。
3.配置 WebSocket 长连接

WebSocket 是一个长连接,这意味着客户端和服务器之间的连接会保持较长时间,甚至是一直持续下去。为了确保 WebSocket 长连接的稳定性和性能,Nginx 需要处理一些与连接生命周期相关的配置。

3.1调整proxy_read_timeout和** proxy_send_timeout**

由于 WebSocket 长连接会在较长时间内保持活跃,因此必须增加 proxy_read_timeout和 proxy_send_timeout的超时时间。否则,如果连接空闲时间较长,Nginx 会认为连接超时并关闭连接。

server { ????listen 80; ????server_name your-domain.com; ????location /ws/ { ????????proxy_pass http://your_backend_server; ????????proxy_http_version 1.1; ????????proxy_set_header Upgrade $http_upgrade; ????????proxy_set_header Connection 'upgrade'; ????????proxy_set_header Host $host; ????????proxy_cache_bypass $http_upgrade; ????????# 调整超时时间 ????????proxy_read_timeout 3600s; ?# 设置为 1 小时,确保长连接不被关闭 ????????proxy_send_timeout 3600s; ?# 设置为 1 小时,允许数据发送较长时间 ????} }
  • proxy_read_timeout:设置 Nginx 等待后端服务器响应的时间。在 WebSocket 中,连接可能处于空闲状态,因此需要一个较长的超时时间。
  • proxy_send_timeout:设置 Nginx 向后端服务器发送数据的超时时间。如果你的应用有长时间的数据传输需求,调整此配置可以避免因超时而断开连接。
3.2调整keepalive_timeout

在 Nginx 中,keepalive_timeout配置指定了 Nginx 在与客户端建立连接后保持连接空闲的时间。WebSocket 长连接需要足够的 keepalive_timeout时间,以便与客户端保持持续的连接。

server { ????listen 80; ????server_name your-domain.com; ????keepalive_timeout 65s; ?# 设置为 65 秒,以确保 WebSocket 长连接稳定 }

通过调整 keepalive_timeout,你可以控制 Nginx 和客户端之间保持空闲连接的时间。为了避免 WebSocket 连接被意外关闭,可以适当增加该值。

4.配置 WebSocket 数据大小限制

WebSocket 数据传输的大小可能会较大,特别是在视频流、文件传输等场景中。Nginx 默认对请求体大小有限制,如果 WebSocket 消息的大小超过默认值,可能会导致连接失败或消息丢失。因此,需要调整 Nginx 的数据传输大小限制。

4.1调整client_max_body_size

client_max_body_size配置控制客户端请求的最大允许大小。对于 WebSocket 长连接,特别是涉及大数据传输的应用,可能需要调整此限制。

server { ????listen 80; ????server_name your-domain.com; ????location /ws/ { ????????proxy_pass http://your_backend_server; ????????proxy_http_version 1.1; ????????proxy_set_header Upgrade $http_upgrade; ????????proxy_set_header Connection 'upgrade'; ????????proxy_set_header Host $host; ????????proxy_cache_bypass $http_upgrade; ????????# 调整请求体大小限制 ????????client_max_body_size 50M; ?# 设置最大请求体为 50MB ????} }
  • client_max_body_size:此设置指定 Nginx 接收客户端请求的最大体积。WebSocket 通常用来传输小型消息,但在某些应用场景下(如视频、文件传输),消息体积可能会较大。因此,适当增加该值,以便处理大数据传输。
4.2调整proxy_max_temp_file_size

Nginx 还会将大数据缓存到临时文件中,proxy_max_temp_file_size配置项可以控制缓存文件的大小。

server { ????listen 80; ????server_name your-domain.com; ????location /ws/ { ????????proxy_pass http://your_backend_server; ????????proxy_http_version 1.1; ????????proxy_set_header Upgrade $http_upgrade; ????????proxy_set_header Connection 'upgrade'; ????????proxy_set_header Host $host; ????????proxy_cache_bypass $http_upgrade; ????????# 调整最大临时文件大小 ????????proxy_max_temp_file_size 1024m; ?# 设置临时文件最大为 1GB ????} }
5.总结

WebSocket 提供了高效的实时通信能力,但在实际部署中,尤其是当涉及长连接和大数据传输时,必须对 Nginx 进行一些优化配置以确保连接的稳定性和高效性。

  • 通过设置合适的 proxy_read_timeout、proxy_send_timeout和 keepalive_timeout,可以确保 WebSocket 长连接在长时间没有活动的情况下仍然保持打开状态。
  • 调整 client_max_body_size和 proxy_max_temp_file_size配置,可以确保 WebSocket 能够传输大数据。
  • 保证 WebSocket 连接的升级(Upgrade)和连接保持(Connection)头部正确转发,确保 WebSocket 协议能够正常工作。

通过这些配置,你可以确保 Nginx 能够高效、稳定地代理 WebSocket 长连接,支持大数据传输,满足实时通信应用的需求。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/3 14:10:02

CUDA out of memory怎么办?Image-to-Video显存优化方案

CUDA out of memory怎么办?Image-to-Video显存优化方案 问题背景与挑战 在使用基于 I2VGen-XL 模型的 Image-to-Video 图像转视频生成器 进行二次开发时,开发者“科哥”遇到了一个典型但棘手的问题:CUDA out of memory(显存溢出&a…

作者头像 李华
网站建设 2026/7/31 2:52:30

能否添加背景音乐?后处理功能开发中,支持音频混音导出

能否添加背景音乐?后处理功能开发中,支持音频混音导出 🎧 语音合成的进阶需求:从“能说”到“好听” 当前,基于 Sambert-Hifigan 的中文多情感语音合成系统已实现高质量、低延迟的文本转语音能力。用户可通过 WebUI 或…

作者头像 李华
网站建设 2026/7/31 0:03:42

STEP文件与PRT文件的区别

STEP文件和PRT文件是工程设计和制造领域中两种常见的三维模型文件格式,它们的主要区别在于通用性和软件关联性。 一句话总结: STEP文件是通用交换格式,用于在不同CAD软件之间安全地传输几何数据。PRT文件是Creo/ProE的专用原生格式&#xff0…

作者头像 李华
网站建设 2026/8/3 10:40:20

华为OD技术面真题 - 计算机网络 - 3

文章目录 介绍一下HTTP报文结构HTTP请求方法有哪些,分别代表什么含义HTTP响应状态码分为哪几类HTTP和HTTPS的区别HTTP请求为什么是无状态的如何使用HTTP实现有状态访问 介绍一下HTTP报文结构 HTTP请求头结构图: 请求报文整体分为四个部分:…

作者头像 李华
网站建设 2026/7/31 22:44:11

在 ABAP Cloud 里正确使用系统字段 SYST:从 SY 到 Context 与 XCO 的迁移指南

很多 ABAP 开发者对 SY 这套系统字段又爱又恨:它随处可用、运行时自动刷新,写日志、判定流程、拼消息都很顺手。可一旦进入 ABAP Cloud(包括 SAP BTP 上的 ABAP environment,以及 S/4HANA Cloud 的 ABAP for Cloud Development 语法版本),你会明显感到同一段代码在不同环…

作者头像 李华