欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 运维知识 > Nginx >内容正文

Nginx

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

发布时间:2025/6/15 Nginx 59 豆豆
生活随笔 收集整理的这篇文章主要介绍了 使用 Nginx 代理 Socket.io/WebSocket 及 负载均衡配置 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

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

《新程序员》:云原生和全面数字化实践50位技术专家共同创作,文字、视频、音频交互阅读

总结

以上是生活随笔为你收集整理的使用 Nginx 代理 Socket.io/WebSocket 及 负载均衡配置的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。