使用Nginx代理和转发Websocket连接

1.Websocket 简介

WebSocket协议是基于TCP的一种新的网络协议。它实现了浏览器与服务器全双工(full-duplex)通信——允许服务器主动发送信息给客户端。

2.Nginx 简介

Nginx是一个反向代理服务器,所有的来自浏览器的请求必须经过Nginx。

通常的正向代理服务器,只用于代理内部网络对Internet的连接请求,客户机必须指定代理服务器,并将本来要直接发送到Web服务器上的http请求发送到代理服务器中,此时客户机是主动方。

而在反向代理中,web服务器是主动方,客户机必须经过代理才能访问。

3.Uwsgi 简介

所谓后端APP,即一套用来处理客户端请求的逻辑部分的程序;

所谓WSGI,即python用来web开发的协议标准;

所谓uWSGI,即一个即可以充当web服务器,又可以作为中间件的程序;

所谓uwsgi,是uWSGI基于WSGI实现的自用的一个协议;

4.配置Nginx代理Websocket连接

一 Nginx监听80端口,并转发到443端口。即默认使用https传输。

二 在443端口,开启ssl,设置证书。

 如果监听到指定websocket连接,设置websocket协议升级,具体配置如下:

proxy_connect_timeout 2s
...
proxy_pass https://clusters
...
proxy_set_header X-Real_IP $remote_addr_IP
proxy_set_header Host $host
proxy_set_header X_Forward_For $X_Forward_For
proxy_http_version 1.1
proxy_set_header Upgrade $http_upgrade
proxy_set_header Connection 'upgrade'

三 监听另一端口,配置同上,并将消息转发给uwsgi端口,交付给uwsgi处理。

5.前后端发送和处理Websocket消息

前端使用javascript接口新建websocket对象,并监听websocket.onmessage事件,进行消息接受和处理。并通过websocket.send()接口进行消息发送。

后端uswgi框架使用类似的websocket对象进行消息收发和处理。

危楼高百尺,手可摘星辰。不敢高声语,恐惊天上人。
原文地址:https://www.cnblogs.com/mingtan/p/9033478.html