我正在尝试将Ruby SinatraAPI部署到EC2微实例的端口4567上。
我创建了一个具有以下规则的安全组(并使用所述安全组创建了实例):
--------------------------------
| Ports | Protocol | Source |
--------------------------------
| 22 | tcp | 0.0.0.0/0 |
| 80 | tcp | 0.0.0.0/0 |
| 443 | tcp | 0.0.0.0/0 |
| 4567 | tcp | 0.0.0.0/0 |
--------------------------------
我在端口 4567(默认值,但为了冗长)上绑定了 myapp.rb:
set :port, 4567
并运行服务:
ruby myapp.rb
[2013-09-05 03:12:54] INFO WEBrick 1.3.1
[2013-09-05 03:12:54] INFO ruby 1.9.3 (2013-01-15) [x86_64-linux]
== Sinatra/1.4.3 has taken the stage on 4567 for development with backup from WEBrick
[2013-09-05 03:12:54] INFO WEBrick::HTTPServer#start: pid=1811 port=4567
在本地主机上的 EC2 实例中使用 ssh 时nmap
:
Starting Nmap 6.00 ( http://nmap.org ) at 2013-09-05 03:13 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00019s latency).
PORT STATE SERVICE
4567/tcp open tram
Nmap done: 1 IP address (1 host up) scanned in 0.08 seconds
在外部 IP 上的 EC2 实例中进行 ssh 时使用nmap
:
Starting Nmap 6.00 ( http://nmap.org ) at 2013-09-05 03:15 UTC
Nmap scan report for <removed>
Host is up (0.0036s latency).
PORT STATE SERVICE
4567/tcp closed tram
Nmap done: 1 IP address (1 host up) scanned in 0.11 seconds
如何将端口的状态从关闭更改为打开?
你在开发环境中启动Sinatra。在开发中运行时,Sinatra只侦听来自本地机器的请求。
有几种方法可以改变这一点,最简单的方法可能是在生产环境中运行,例如:
$ ruby myapp.rb -e production
如果您想继续在开发中运行,也可以显式设置 bind 变量:
set :bind, '0.0.0.0' # to listen on all interfaces
您的问题有两个可能的原因。
- 您的服务仅侦听环路接口上的连接。
- 软件防火墙正在运行,并阻止来自该端口的外部连接。