Nginx代理WebSocket配置

WebSocket 协议提供了一种创建支持客户端和服务器之间实时双向通信的 Web 应用程序的方法。作为 HTML5 的一部分,WebSocket 使得开发这些类型的应用程序比以前的方法更容易。大多数现代浏览器都支持WebSocket,包括Chrome、Firefox、Internet Explorer、Opera和Safari,而且现在越来越多的服务器应用框架也支持WebSocket。

对于企业生产用途来说,如果需要多个WebSocket服务器以保证性能和高可用性,则需要一个了解WebSocket协议的负载平衡层,而NGINX从1.3版本开始就支持WebSocket,并且可以作为反向代理,对WebSocket应用进行负载平衡。所有版本的NGINX Plus也都支持WebSocket)。

WebSocket协议与HTTP协议不同,但WebSocket握手与HTTP兼容,使用HTTP升级设施可将连接从HTTP升级到WebSocket。这使得WebSocket应用可以更容易地融入现有的基础架构中。例如,WebSocket 应用程序可以使用标准 HTTP 端口 80 和 443,从而允许使用现有的防火墙规则。

WebSocket 应用程序可在客户端和服务器之间保持长期开放的连接,便于开发实时应用程序。HTTP Upgrade机制用于将连接从HTTP升级到WebSocket,使用升级和连接头。反向代理服务器在支持WebSocket时面临着一些挑战。其中之一是 WebSocket 是逐跳协议,因此当代理服务器从客户端截获升级请求时,它需要向后端服务器发送自己的升级请求,包括适当的头信息。此外,由于 WebSocket 连接是长期的,而不是 HTTP 使用的典型的短连接,因此反向代理需要允许这些连接保持开放,而不是因为它们似乎是空闲的而关闭它们。

NGINX通过允许在客户端和后端服务器之间建立隧道来支持WebSocket。

为了让NGINX将Upgrade请求从客户端发送到后端服务器,必须显式设置Upgrade和Connection头

设置如下:

location /wsapp {    
proxy_pass http://wsbackend/wsapp;    
proxy_http_version 1.1;    
proxy_set_header Upgrade $http_upgrade;    
proxy_set_header Connection "Upgrade";    
proxy_set_header Host $host;
}

版权声明:本文为作者原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原创文章,作者:老C,如若转载,请注明出处:https://www.code404.icu/292.html

发表评论

登录后才能评论