即使安全组允许一切,从外部访问 Amazon EC2 机器也会超时
Timeout accessing Amazon EC2 machine from outside even with security group allowing everything
你好吗?
我对我的应用程序(是否已 docker 化)的外部访问有疑问。
我有一个简单的乒乓套接字通信,使用 socket.io 和以下代码文件:
server.js
let Server = require('socket.io')
const io = new Server().attach(8090)
io.on('connection', (socket) => {
console.log('connection')
socket.on('message', (msg) => {
console.log('< ' + msg)
console.log('> pong')
socket.emit('event', 'pong')
})
})
client.js
let host = process.argv[2]
let io = require("socket.io-client");
let client = io.connect(`http://${host}`)
let connected = false
client.on('connect', () => {
connected = true
})
client.on('event', (msg) => {
console.log('< ' + msg)
ping()
})
function ping () {
if (!connected) {
setTimeout(ping, 1000)
} else {
setTimeout(() => {
console.log('> ping')
client.emit('message', 'ping');
}, 1000)
}
}
ping()
在我的服务器启动并 运行ning 的情况下,我可以像这样执行客户端来测试通信:
$ node client.js localhost:8090
输出类似于:
> ping
< pong
> ping
< pong
> ping
< pong
... and so on
当我在我的 EC2 机器外测试这个(客户端和服务器)时一切正常,但是当我将 server.js 部署到云并 运行 它时,我无法访问它来自外面。
当我在端口 80 或 81 上绑定一个 nginx 网络服务并将每个请求代理到应用程序时,从云外部开始一切正常,但在其他端口上仍然无法正常工作。
我的安全组是完全开放的(用于测试目的)(入站和出站允许所有流量在所有端口上进出任何地方(0.0.0.0/0,::/0))(截图附后)。
可能对故障排除有用的东西:
- 当我尝试在同一端口上使用节点的 NodeJS http 服务器(没有 nginx)时,它也不起作用(仅适用于 80 和 81)
- 我确定我的机器在 'fully-open-insecure' 安全组中,允许所有流量。
- 我的应用程序绑定到所有地址,因为我可以使用 public 地址或云计算机内部的本地主机连接到它。
- 当我 proxy_pass 来自与 NodeJS 应用程序位于同一台计算机上的 nginx Web 服务器的连接时,它仅适用于端口 80 和 81
任何帮助或疑难解答建议将不胜感激。
非常感谢您的宝贵时间
下面是安全组定义的截图:
我的问题已经解决了,这很尴尬。我的本地网络不允许在我提到的端口上进行出站连接。
如果您遇到同样的问题,我建议您测试您的本地网络。另外,检查你的 iptables 规则
你好吗?
我对我的应用程序(是否已 docker 化)的外部访问有疑问。
我有一个简单的乒乓套接字通信,使用 socket.io 和以下代码文件:
server.js
let Server = require('socket.io')
const io = new Server().attach(8090)
io.on('connection', (socket) => {
console.log('connection')
socket.on('message', (msg) => {
console.log('< ' + msg)
console.log('> pong')
socket.emit('event', 'pong')
})
})
client.js
let host = process.argv[2]
let io = require("socket.io-client");
let client = io.connect(`http://${host}`)
let connected = false
client.on('connect', () => {
connected = true
})
client.on('event', (msg) => {
console.log('< ' + msg)
ping()
})
function ping () {
if (!connected) {
setTimeout(ping, 1000)
} else {
setTimeout(() => {
console.log('> ping')
client.emit('message', 'ping');
}, 1000)
}
}
ping()
在我的服务器启动并 运行ning 的情况下,我可以像这样执行客户端来测试通信:
$ node client.js localhost:8090
输出类似于:
> ping
< pong
> ping
< pong
> ping
< pong
... and so on
当我在我的 EC2 机器外测试这个(客户端和服务器)时一切正常,但是当我将 server.js 部署到云并 运行 它时,我无法访问它来自外面。
当我在端口 80 或 81 上绑定一个 nginx 网络服务并将每个请求代理到应用程序时,从云外部开始一切正常,但在其他端口上仍然无法正常工作。
我的安全组是完全开放的(用于测试目的)(入站和出站允许所有流量在所有端口上进出任何地方(0.0.0.0/0,::/0))(截图附后)。
可能对故障排除有用的东西:
- 当我尝试在同一端口上使用节点的 NodeJS http 服务器(没有 nginx)时,它也不起作用(仅适用于 80 和 81)
- 我确定我的机器在 'fully-open-insecure' 安全组中,允许所有流量。
- 我的应用程序绑定到所有地址,因为我可以使用 public 地址或云计算机内部的本地主机连接到它。
- 当我 proxy_pass 来自与 NodeJS 应用程序位于同一台计算机上的 nginx Web 服务器的连接时,它仅适用于端口 80 和 81
任何帮助或疑难解答建议将不胜感激。
非常感谢您的宝贵时间
下面是安全组定义的截图:
我的问题已经解决了,这很尴尬。我的本地网络不允许在我提到的端口上进行出站连接。
如果您遇到同样的问题,我建议您测试您的本地网络。另外,检查你的 iptables 规则