2019独角兽企业重金招聘Python工程师标准>>>

转自:http://naux.me/using-nginx-with-socketio/

0,介绍

Socket.io 一套是基于 WebSocket 协议的实时通讯 API,可以很轻松的开发类似于实时聊天,实时游戏之类的 Web 应用。

Nginx 从 1.3 版本开始支持 WebSocket 代理,我们也能将其应用于 Socket.io,实现如 Socket.io 的负载均衡,和 Web 共用 80(HTTP) 或 443(HTTPS) 端口处理握手请求等需求。

1,配置代理

在 server 配置块中添加如下配置中的 location /socket.io/ 配置块即可实现 WebSocket 在 80/443 端口握手。

server {  listen 80;    listen 443 ssl;server_name example.domain;root "/project/path";    index index.html index.htm index.php;location /socket.io/ {        # 此处改为 socket.io 后端的 ip 和端口即可proxy_pass http://127.0.0.1:5000;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "upgrade";proxy_http_version 1.1;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header Host $host;}
}

配置中的 /socket.io/ 可在 Socket.io 中的 path 选项中配置, 其默认为 /socket.io

2,负载均衡

均衡算法要使用 ip_hash, 防止使用 long-polling 通信时请求分发到了不同的服务器导致异常。

server {  listen 80;    listen 443 ssl;server_name example.domain;root "/project/path";    index index.html index.htm index.php;    // 配置负载的后端upstream socket_nodes {ip_hash;server server1.app:5000 weight=5;server server2.app:5000;server server3.app:5000;server server4.app:5000;}location /socket.io/ {proxy_pass http://socket_nodes;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "upgrade";proxy_http_version 1.1;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header Host $host;}// 其他配置项// ...
}

3,测试代码

写个小的 Socket.io 代码测试一下

Node端,开启一个 Socket.io 服务器,并监听 5000 端口, 通过上面的 nginx 配置使用 80 端口代理

app.js

var io = require('socket.io').listen(5000);io.sockets.on('connection', function (socket) {  socket.on('set nickname', function (name) {socket.set('nickname', name, function () {socket.emit('ready');});});socket.on('msg', function () {socket.get('nickname', function (err, name) {      console.log('Chat message by ', name);});});
});

客户端,在浏览器中连接 Socket.io 服务器

index.html

<script src="/socket.io/socket.io.js"></script>
<script>var socket = io();
</script>

转载于:https://my.oschina.net/coderman/blog/647897

使用 Nginx 代理 Socket.io/WebSocket 及 负载均衡配置相关推荐

  1. Nginx教程系列五:实现负载均衡配置

    文章目录 1. 案例 1.1 环境准备 1.2 实现效果 1.3 修改Nginx配置文件 1.4 测试 2. 负载均衡策略对比 2.1 轮询 2.2 权重 2.3 iphash 2.4 fair 1. ...

  2. 地址设置nginx负载均衡_nginx负载均衡配置实例

    什么是负载均衡? 负载均衡主要通过专门的硬件设备或者通过软件算法实现.通过硬件设备实现的负载均衡效果好.效率高.性能稳定,但是成本比较高.通过软件实现的负载均衡主要依赖于均衡算法的选择和程序的健壮性. ...

  3. Nginx反向代理、动静分离、负载均衡及rewrite隐藏路径详解(Nginx Apache MySQL Redis)–第二部分...

    Nginx反向代理.动静分离.负载均衡及rewrite隐藏路径详解 (Nginx Apache MySQL Redis) 楓城浪子原创,转载请标明出处! 更多技术博文请见个人博客:https://fe ...

  4. Nginx反向代理及简单负载均衡配置

    nginx配置文件主要分为六个区域:main section.events section.http section.sever section.location section.upstream s ...

  5. Nginx 概述 如何正规安装 静态网页配置 反向代理配置 负载均衡配置

    目录 1. 基本概念 1.1 Nginx初步认识 1.2 正向/反向代理 1.3 域名和IP 2. Nginx安装和配置 2.1 安装Nginx 2.2 配置 3. Nginx的使用 3.1 部署静态 ...

  6. nginx反向代理+缓存开启+url重写+负载均衡(带健康探测)的部署记录

    在日常运维工作中,运维人员会时常使用到nginx的反向代理,负载均衡以及缓存等功能来优化web服务性能. 废话不多说,下面对测试环境下的nginx反向代理+缓存开启+url重写+负载均衡(带健康探测) ...

  7. 使用Nginx反向代理来实现简单的负载均衡

    Nginx反向代理的原理优点: 反向代理可以简单的理解为:代理服务器来接收internet上的服务器请求,然后将请求转发给内部的服务器上,然后将结果返回给internet上请求的客户端,所以代理服务器 ...

  8. Nginx反向代理实现负载均衡配置图解

     come from: http://www.php100.com/html/program/nginx/2013/0905/5529.html 负载均衡配置是超大型机器需要考虑的一些问题,同时也 ...

  9. Nginx运维之一 反向代理、动静分离、负载均衡

    Nginx运维之一 反向代理.动静分离.负载均衡 Nginx简述 Nginx 优势功能 Tengine 反向代理 正向代理 反向代理 动静分离 负载均衡 Nginx简述 Nginx是lgor Syso ...

最新文章

  1. python使曲线变得平滑_如何在Python中平滑数据?
  2. [蓝桥杯][历届试题]国王的烦恼(反向+并查集)
  3. 53.Maximum Subarray
  4. asp.net动态加载css
  5. cpu 被挂起和阻塞_迄今为止把同步/异步/阻塞/非阻塞/BIO/NIO/AIO讲的这么清楚的好文章...
  6. failed to open log file_C++中glog源码剖析以及如何设计一个高效 log模块
  7. 转:Linux设备驱动开发(1):内核基础概念
  8. python图片转base64编码,与base64编码转图片
  9. 正则表达式批量替换 单引号
  10. csharp与java的区别_C#与JAVA之比较(1)
  11. unity2019 vuforia 使用小记
  12. [人月神话]读书笔记---人月神话的观点:是与非
  13. 如何使用Internet Download Manager批量下载音乐素材?
  14. nginx反向代理中proxy_set_header的含义
  15. 信阳毛尖大山茶、高山茶、小山茶的辨别
  16. pta 天梯赛 7-3 换硬币 (20 分)day4
  17. 2022全年度平板电视十大热门品牌销量榜单
  18. google多开设置
  19. Zuul1与Spring Cloud Gateway的区别
  20. append() 与appendTo 比较

热门文章

  1. 淡谈泛型约束T(转)
  2. linux虚拟机网卡启动失败问题处理
  3. java中的易混问题收集
  4. 鸿蒙之境的称号,《神都夜行录》鸿蒙之境80级古都凶煞打法
  5. python正态分布随机数_Python使用numpy产生正态分布随机数的向量或矩阵操作示例...
  6. poj1182 and 携程预赛2第一题 带权并查集
  7. C语言-链表的创建头插法和尾插法(有无头节点)
  8. 【Android 逆向】Android 进程注入工具开发 ( 注入代码分析 | 调试进程 ATTACH 附着目标进程 | 读取目标函数寄存器值并存档 )
  9. Linux系统的基本命令
  10. redis持久化的几种方式