我有一个 EC2 实例在 AWS 应用程序负载均衡器后面运行。在端口 5000 上运行的 Ec2 实例 socket.io 上。现在我想将域/socket.io 端口 80 请求从 AWS 应用程序负载均衡器重定向到端口 5000。我使用 AWS ALB ( CNAME ) 映射的域。
现在,当我从外部端口 80 连接时,它可以工作但无法从外部向套接字服务器发送消息。但是当我从外部直接连接到端口 5000 时,我可以从外部发送消息。
我不知道为什么不能从端口 80 向端口 5000 发送消息。在 EC2 实例上使用 apache2.4 版本,所以我启用了所有必要的模块。
我的 apache 配置用于 socket.io 是:
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'); });
请帮助我解决这个问题。