如何 运行 Rails 在 AWS 的 80 端口上?

How to run Rails on port 80 on AWS?

我正在尝试重启 AWS Amazon Linux 上的 Rails 应用程序。 我通过 AWS 控制台重启实例,但无法通过端口 80 访问该服务。

条件是:

  1. 应用程序在重新启动前工作正常。

  2. 应用程序在端口 3000 上工作。

  3. 应用程序可以 运行 在端口 80 上(如 rails s -d -b 0.0.0.0 -p 80)。

  4. AWS 的安全组表示它对入站 HTTP 开放 80。

有什么我必须检查的吗?

您应该确保 OS 本身已打开该端口(AWS 可能会在外部防火墙级别阻止某些端口的流量;这不是您的情况)。一旦我遇到类似的问题,这些命令帮助了我:

iptables -I INPUT 4 -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
/etc/init.d/iptables save

在我的例子中有美分OS,如果重要的话。

好的,我知道怎么做了:

sudo iptables -t nat -I PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 3000

您可以通过此命令将端口80 上收到的数据包转发到端口3000。您可以运行 端口3000 上的应用程序然后在端口80 上访问。

但是这里还有一个问题:

Why rails s -d -b 0.0.0.0 -p 80 (running application on port 80) didn't work

[更新] 这是因为 iptables 不接受 80 端口的数据包。您可以通过@hedgesky 的命令进行配置。感谢您的帮助。