nginx做为websocket反向代理和负载均衡器

这里先简单说下websocket与http的区别,websocket是长连接,而且客户端和服务端都可以主动给对方发送数据;而http是短连接的(当然可以是长连接http 1.1),但是只能是客户端主动发起请求,服务端做出响应。

在实际的生产环境中,一般要求多个websocket服务器必须具备高可用和高性能,这样webcoket就需要一个负载均衡层,本着有现有的轮子就使用现有轮子的原则,这里选择使用nginx做为websocket的反向代理和负载均衡器。虽然websocket和http协议不同,但是websocket与http握手兼容,可以使用http升级工具将http连接升级为websocket,这有助于websocket更容易的适应现有的软件架构,比如:websocket应用程序可以使用标准http的80和433端口,从而允许现有的防火墙策略。

websocket应用程序可以在客户端和服务器之间保持长时间运行的连接,从而有助于开发实时应用程序。用于将连接从http升级到websocket的http升级机制使用Upgrade和Connection头。反向代理服务器在支持websocket时面临一些挑战。一个是websocket是一个逐跳协议,因此当代理服务器拦截客户端的升级请求时,需要向后端服务器发送自己的升级请求,包括相应的头文件。此外,由于websocket连接长期存在,与http使用的典型短期连接相反,反向代理需要允许这些连接保持打开状态,而不是关闭它们,因为它们似乎处于空闲状态。

允许在客户机和后端服务器之间建立隧道,nginx支持websocket。对于nginx将升级请求从客户端发送到后台服务器,必须明确设置Upgrade和Connection头字段。

nginx开启websocket代理功能的部分配置示例如下:

upstream rtc {
    server 10.59.37.20:50000;
    server 10.59.37.21:50000;
    ip_hash;
}

location / {
           client_max_body_size 50m;
           proxy_pass http://rtc;
           proxy_http_version 1.1;
           proxy_set_header Upgrade $http_upgrade;
           proxy_set_header Connection "upgrade";
           proxy_set_header Host $http_host;
           proxy_set_header x-real-ip $remote_addr;
           proxy_set_header x-scheme $scheme;
           proxy_read_timeout 1d;
           proxy_send_timeout 1d;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值