WebSocket是一种协议,提供了一种创建Web应用程序的方式,该应用程序支持客户端和服务器之间的实时双向通信。WebSocket使开发这些类型的应用程序变得更加容易。大多数现代浏览器都支持WebSocket,包括Firefox,Internet Explorer,Chrome,Safari和Opera,并且现在越来越多的服务器应用程序框架也支持WebSocket。
在生产环境中,需要多个WebSocket服务器来获得良好的性能和网站或应用程序的高可用性,需要了解WebSocket协议的负载平衡层,NGINX支持使用NGINX版本1.3中的WebSocket并可以采取行动作为进行应用程序负载平衡的反向代理。
NGINX通过允许在客户端和后端服务器之间建立隧道来支持WebSocket。NGINX将把升级请求从客户端发送到后端服务器,必须明确设置升级和连接头。
location /wsapp/ { proxy_pass http://wsbackend; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; }
完成此操作后,NGINX将其作为WebSocket连接处理。
这是一个演示NGINX作为WebSocket代理工作的实时示例。此示例有助于在Node.js上构建WebSocket实现。NGINX充当使用ws和Node.js的简单WebSocket应用程序的反向代理。这些说明已在Ubuntu 13.10和CentOS 6.5上进行了测试,但需要针对其他操作系统和版本进行调整。在此示例中,WebSocket服务器的IP地址为192.168.1.1,NGINX服务器的IP地址为192.168.1.2
如果没有安装Node.js和npm,请运行以下命令:
# sudo yum install nodejs npm
Node.js在Ubuntu上作为nodejs安装,在CentOS上作为node安装。该示例使用节点,因此在Ubuntu上,我们需要创建一个从nodejs到node的符号链接:
# ln -s /usr/bin/nodejs /usr/local/bin/node
要安装Websocket,请运行以下命令:
# sudo npm install ws
注意:如果收到错误消息,例如:“错误:无法从注册表获取:ws”,请运行以下命令来解决问题
# sudo npm config set registry http://registry.npmjs.org/
然后再次运行sudo npm install命令
# sudo npm install ws
'ws'附带了可用于我们的客户端的程序/ root / node_modules / ws / bin / wscat,但是我们需要创建一个程序来充当服务器。使用这些内容创建一个名为server.js的文件
console.log("Server started"); var Msg = ''; var WebSocketServer = require('ws').Server , wss = new WebSocketServer({port: 8010}); wss.on('connection', function(ws) { ws.on('message', function(message) { console.log('Received from client: %s', message); ws.send('Server received from client: ' + message); }); });
要执行服务器程序,请运行以下命令:
# node server.js
服务器打印初始的“服务器已启动”消息,然后在端口8010上侦听,以等待客户端连接到它。当它收到客户端请求时,它会回显该请求,并将包含收到的消息的消息发送回客户端。为了让NGINX代理这些请求,我们创建以下配置
http { map $http_upgrade $connection_upgrade { default upgrade; '' close; } upstream websocket { server 192.168.1.1:8010; } server { listen 8020; location / { proxy_pass http://websocket; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; } } }
NGINX侦听端口8020并将代理请求发送到后端WebSocket服务器。proxy_set_header指令使NGINX能够正确处理WebSocket协议。
为了测试服务器,我们在客户端系统中运行wscat
# /root/node_modules/ws/bin/wscat --connect ws://192.168.1.2:8020
wscat通过NGINX代理连接到WebSocket服务器。当您键入wscat发送到服务器的消息时,您会看到它在服务器上回显,然后来自服务器的消息出现在客户端上。这是一个示例互动
服务器:客户端:
# node server.js Server started # wscat –connect ws://192.168.1.2:8020 Connected (press CTRL+C to quit) > Hello Received from client: Hello < Server received from client: Hello
在这里,我们看到客户端和服务器能够通过充当代理服务器的NGINX进行通信,并且消息可以继续发送回去,直到客户端或服务器断开连接为止。将NGINX正确配置为处理WebSocket所需的所有操作,并正确设置标头以处理将连接从HTTP升级到WebSocket的Upgrade请求。
本文向大家介绍Nginx反向代理websocket配置实例,包括了Nginx反向代理websocket配置实例的使用技巧和注意事项,需要的朋友参考一下 最近有一个需求,就是需要使用 nginx 反向代理 websocket,经过查找一番资料,目前已经测试通过,本文只做一个记录 1.下载 tengine 最近的源码 2.安装基础的依赖包 3.解压编译安装 nginx.conf 的配置如下: test
本文向大家介绍nginx反向代理webSocket配置详解,包括了nginx反向代理webSocket配置详解的使用技巧和注意事项,需要的朋友参考一下 最近在做项目的时候用到了webSocket协议,而且是在微信小程序中用到了webSocket,微信小程序中使用wss协议的时候不能设置端口,只能使用默认的443端口。我擦,我的https已经监听了443端口,webSocket再去监听443,肯定不
我有一个运行在ip和端口上的MQTT(EMQX)服务器。我使用nodejs MQTT库在我的服务和该端口之间直接通信。 我想使用反向代理(nginx),以便能够使用DNS来修剪通信。 此时,我的nginx配置如下: 因此,当我尝试通过8888端口连接时,nginx总是超时 这两项服务都在docker容器中。并由docker编写。 MQTT服务的组合是: 和nginx是: 我必须在mqtt中更改任何
我有一个部署在野蝇10.1应用程序服务器上的webapp。此webapp被监听:http://localhost:8080/app-profile-jsp/(1) 我成功安装了nginx。服务器已成功安装,我测试提供静态网页和图像。 现在我想配置nginx从“http://www . fri zio . local”(2)URL访问web应用程序。我在/etc/hosts中配置了这个地址。 我在n
我正在尝试通过两个nginx代理发出websocket请求。是做SSR(服务器端渲染) 我的堆栈是这样的:外部世界 当我在做《外部世界》的时候 Websocket连接建立得非常好。但是当我实现rendora(SSR)并向nginx添加另一个代理时,它不起作用。握手时 Websocket 连接失败。我猜“升级”请求在我的nginx服务器的某个地方失败了。我的nginx conf如下: 因此,位置/端
我有一个spring boot应用程序(带有Keyclope适配器),运行在端口8000上,Keyclope运行在8080上 我编辑了我的 /etc/hosts文件,将测试域(foo.bar.com)上的请求路由到127.0.0.1 到目前为止,我对SSL不感兴趣。 我的示例nginx配置: 问题: 此示例nginx conf是否足够?我有一些无限的重定向发生。我的spring应用程序中来自Key