如何使用nginx

时间:2019-03-22 12:55:18

标签: express nginx socket.io

我正在使用Node(express),socket.io和Nginx制作高度可扩展的聊天应用程序。

我通过充当负载平衡器/反向代理来理解Nginx的工作方式。这是我的Nginx配置:

worker_processes auto;

events {
    worker_connections  1024;
}

http {
  server {
    listen 80;
    root /public/;

    location / {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $host;

        proxy_pass http://io_nodes;

        #enable websockets 
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_update;
        proxy_set_header Connection "upgrade";

    }
  }
    #load balancing socket io
    upstream io_nodes {
        # enable sticky sessions
        ip_hash;
        server 127.0.0.1:8080;
        server 127.0.0.1:8081;
        server 127.0.0.1:8082;
        server 127.0.0.1:8083;
    }
}

我到达端口80上的nginx端口,但是我没有分发到其他服务器。我可以告诉你,因为pid是相同的。我有一种感觉是因为socket.io和名称空间?我不太了解它,也找不到很好的文章或视频来解释它。

这是服务器:

const express = require('express');
const app = express();
const PORT = process.env.PORT || 8080;
const ENV = process.env.ENV || 'development';
const server = require('http') .createServer(app);
const io = require('socket.io')(server);
const redis = require('socket.io-redis');

server.listen(PORT, (err) => {
  if (err) console.error('❌ Unable to connect the server: ', err);
  console.log(` Chat server listening on port ${PORT} - ${ENV} environment`);
});

io.on('connection', socket => {
  console.log(`made socket connections, socket ID: ${socket.id} and pid ${process.pid}`);
});

最后是前端部分:

socket.emit('new message', {
    message: message.value,
    author: author.value
});

所以我的问题是这个

  • 如何创建用于侦听nginx路由的不同端口的不同的socketio服务器。从我对名称空间的理解来看,它创建了一个聊天端点来通过它进行通讯,而不是通过不同的socketio实例进行通讯,对吗?
  • 我正以正确的方式看吗?我觉得我无法完全理解一件作品。

一如既往,我们将提供所有帮助!

编辑:进一步阅读here显示他使用上游作为:

upstream socket_nodes {
    ip_hash;
    server srv1.app.com:5000 weight=5;
    server srv2.app.com:5000;
    server srv3.app.com:5000;
    server srv4.app.com:5000;
}

这是否意味着您不能真正在localhost /不同端口上测试,而是在不同地址上进行测试(有意义)

0 个答案:

没有答案