来自端口80的Socket.io访问和来自AWS应用程序负载平衡器的端口5000上的apache反向代理

时间:2018-06-23 05:10:43

标签: apache amazon-web-services socket.io reverse-proxy mod-proxy-wstunnel

我有一个EC2实例在AWS应用程序负载均衡器后面运行。在端口5000上运行的Ec2实例socket.io上。现在,我想将domain / socket.io端口80请求从AWS应用程序负载均衡器重定向到端口5000。我已使用AWS ALB(CNAME)映射的域。

现在,当我从外部端口80连接时,它可以工作,但无法从外部向套接字服务器发送消息。但是,当我从外部直接在端口5000上连接时,我可以从外部发送消息。

我不知道为什么不能将消息从端口80发送到端口5000。在使用apache2.4版本的EC2实例上,我已经启用了所有必要的模块。

我的用于socket.io的apache配置是:

    RewriteEngine On
    RewriteCond %{REQUEST_URI}  ^/socket.io [NC]
    RewriteCond %{QUERY_STRING} transport=websocket [NC]
    RewriteRule /(.*)           ws://localhost:5000/$1 [P,L]
    ProxyPass /socket.io  http://localhost:5000/socket.io
    ProxyPassReverse /socket.io http://localhost:5000/socket.io

请让我知道如何使用AWS alb从外部将消息发送到端口5000上的socket.io服务器。

Socket.io app.js文件在下面:

let app = require('express')();
    let http = require('http').Server(app); let io = require('socket.io')(http);

io.on('connection', (socket) => {

    // Log whenever a user connects
    console.log('user connected');

    // Log whenever a client disconnects from our websocket server
    socket.on('disconnect', function(){
        console.log('user disconnected');
    });

    // When we receive a 'message' event from our client, print out
    // the contents of that message and then echo it back to our client
    // using `io.emit()`
    socket.on('message', (message) => {
        console.log("Message Received: " + message);
       socket.emit('message', {type:'new-message', text: message});    
    }); });

app.get('/', function(req, res){
    res.send('<h1>Hello world</h1>');   });  

// Initialize our websocket server on port 5000 http.listen(5000, ()
=> {
    console.log('started on port 5000'); });

请帮助我。

0 个答案:

没有答案