服务器 > 网络 > websocket

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

14人参与 2025-12-27 websocket

websocket 协议是实现实时通信的关键技术。相比于传统的 http 请求-响应模式,websocket 提供了双向、持久化的通信方式。

nginx 作为一个高性能的反向代理服务器,可以非常有效地处理 websocket 连接,但要正确处理 websocket 长连接和传输大数据,必须进行一些特定的配置。

1.websocket 连接的基本概念

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

nginx 的作用通常是充当反向代理,它将 websocket 请求转发给后端应用服务器。因此,在配置 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 解释配置项

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 小时,允许数据发送较长时间
	}

}

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

	}

}

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 进行一些优化配置以确保连接的稳定性和高效性。

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

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

您想发表意见!!点此发布评论

推荐阅读

Nginx使用Prometheus+Grafana实现日志分析与监控

12-27

深入理解NumPy 的 np.column_stack的实现

01-07

Websocket的用法及常见应用场景

12-16

检查 Nginx 是否启动的几种方法

12-05

Nginx配置WSS安全WebSocket代理的实现

12-05

Nginx代理WebSocket失败的完整排查过程

11-14

猜你喜欢

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

发表评论