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

 更新时间:2025年12月27日 14:56:07   作者:百***5588  
Nginx通过配置HTTP代理,可以有效地处理WebSocket连接,支持长连接和大数据传输,关键配置包括设置HTTP/1.1版本、升级头部、连接头部、增加超时时间、调整最大请求体大小和临时文件大小,这些配置确保了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 长连接,支持大数据传输,满足实时通信应用的需求。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Nginx中proxy_pass的斜杠的两种方式

    Nginx中proxy_pass的斜杠的两种方式

    Nginx的官方文档将proxy_pass分为不带URI和带URI两种类型,本文就来介绍Nginx中proxy_pass的斜杠的两种方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-10-10
  • Nginx部署Vue项目添加访问后缀方式

    Nginx部署Vue项目添加访问后缀方式

    文章介绍了如何根据需要为Vue项目配置不同的访问路径,并通过Nginx进行相应的配置,通过设置`vue.config.js`中的`publicPath`和`route`的`base`为`/app`,并将打包后的文件放入指定目录,然后在Nginx配置中使用`alias`和`try_files`指令来处理路径
    2025-01-01
  • 重启nginx后丢失nginx.pid的解决方法

    重启nginx后丢失nginx.pid的解决方法

    本文介绍下,重启nginx服务后丢失nginx.pid文件的解决方法,有需要的朋友,可以作个参考
    2014-01-01
  • Prometheus监控实战篇Nginx、Hbase操作详解

    Prometheus监控实战篇Nginx、Hbase操作详解

    这篇文章主要介绍了Prometheus监控实战篇Nginx、Hbase,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-02-02
  • nginx日志中添加请求的response日志(推荐)

    nginx日志中添加请求的response日志(推荐)

    这篇文章主要介绍了nginx日志中添加请求的response日志,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2018-05-05
  • Nginx配置proxy protocol代理获取真实ip的全过程

    Nginx配置proxy protocol代理获取真实ip的全过程

    在现代开发中有很多场景需要拿到用户的真实ip,比如安全策略,和地区热点信息推送等功能,但是现在代理很多,用户可能会通过代理访问服务,或者黑客攻击的时候也会使用很多肉机隐藏其真实ip,所以本文给大家介绍了Nginx配置proxy protocol代理获取真实ip的全过程
    2025-09-09
  • Nginx解决转发地址时跨域的问题

    Nginx解决转发地址时跨域的问题

    这篇文章主要介绍了Nginx实现转发地址解决跨域问题的方法,文中介绍的很详细,对大家的学习具有一定的参考借鉴价值,有需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-01-01
  • nginx 部署前端vue项目的方法实践

    nginx 部署前端vue项目的方法实践

    本文主要介绍了Nginx的基本概念及其优点,并详细阐述了如何使用Nginx部署前端Vue项目的步骤,主要包括安装Nginx、打包Vue项目和配置Nginx三个步骤,感兴趣的可以了解一下
    2024-10-10
  • Nginx 正向代理和反向代理的配置实现

    Nginx 正向代理和反向代理的配置实现

    Nginx通过优秀的架构设计和高效的算法实现了高性能和高可靠性,本文主要介绍了Nginx 正向代理和反向代理的配置实现,具有一定的参考价值,感兴趣的可以了解一下
    2023-06-06
  • 利用Nginx实现URL重定向的简单方法

    利用Nginx实现URL重定向的简单方法

    使用Nginx的重定向功能时,除了可以重定向到新域名,还可以将请求重定向到特定的协议上,下面这篇文章主要给大家介绍了关于如何利用Nginx实现URL重定向的简单方法,需要的朋友可以参考下
    2022-04-04

最新评论