Sinatra EC2部署安全组错误

3
我将尝试在EC2微型实例的端口4567上部署Ruby Sinatra api。我已创建了一个安全组并添加了以下规则(并使用该安全组创建了实例):
--------------------------------
| 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 |
--------------------------------

我将myapp.rb绑定到了端口4567(默认端口,但为了更加详细):
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

我在 EC2 实例上通过 SSH 登录后,使用 nmap 工具扫描了外部 IP。

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

我该如何将端口状态从关闭改为打开?

2个回答

3
你正在开发环境下启动Sinatra。在开发模式下运行时,Sinatra只接受来自本地机器的请求
有几种方法可以改变这种情况,其中最简单的可能是在生产环境下运行,例如:
$ ruby myapp.rb -e production

如果您想继续在开发环境中运行,也可以显式设置绑定变量:

set :bind, '0.0.0.0' # to listen on all interfaces

太棒了。在我的情况下,“-e production”标志没有起作用,但是“set:bind,'0.0.0.0'”打开了对端口4567的访问权限。谢谢! - alexhuang91
1
@user1296908 你是否正在使用模块化风格?看起来命令行标志对于模块化应用程序不起作用,只适用于经典风格。如果需要的话,你可以从命令行设置RACK_ENV环境变量,模块化应用程序将会遵循该设置。 - matt

0

你的问题可能有两个原因。

  1. 你的服务只监听回环接口上的连接。
  2. 一个软件防火墙正在运行,并且阻止来自该端口外部的连接。

是的,我也得出了同样的结论。只是我不知道该如何修复它。谢谢。 - alexhuang91

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接