Amazon EC2上端口80上的Rails应用程序 - 使用Nginx或IpTables

时间:2013-08-02 04:57:32

标签: amazon-ec2 unicorn

我在EC2上设置了一个简单的rails应用程序,我用Unicorn运行它。我想现在设置它以便它在端口80上运行。使用-p标志和unicorn_rails命令不起作用;我收到一条错误,说拒绝许可:

[ec2-user@ip-10-164-110-7 current]$ unicorn_rails -p 80
F, [2013-08-02T04:41:41.441613 #3297] FATAL -- : error adding listener addr=0.0.0.0:80
/home/ec2-user/uc_social_server/shared/bundle/ruby/1.9.1/gems/unicorn-4.6.3/lib/unicorn/socket_helper.rb:147:in `initialize': Permission denied - bind(2) (Errno::EACCES)
    from /home/ec2-user/uc_social_server/shared/bundle/ruby/1.9.1/gems/unicorn-4.6.3/lib/unicorn/socket_helper.rb:147:in `new'
    from /home/ec2-user/uc_social_server/shared/bundle/ruby/1.9.1/gems/unicorn-4.6.3/lib/unicorn/socket_helper.rb:147:in `bind_listen'

在线搜索解决方案,我一直在寻找有关设置Nginx + Unicorn的帖子。然后有一些提到使用IpTables将端口8080流量重定向到端口80。

我不确定采取哪种方法。

我需要Nginx吗?

有没有办法允许ec2-user在端口80上运行独角兽进程?

IpTables解决方案是一种好方法吗?我不知道是不是。

1 个答案:

答案 0 :(得分:0)

在这里,他们显然解决了unicorn -p

的问题

Unable to start unicorn on port 80 using capistrano

另外两种解决方案也都能很好地运作。

使用IPtables,您可以将来自端口80的传入流量重定向到侦听8080并返回的独角兽套接字。这发生在TCP层上。

nginx方法是透明的代理设置。所有的魔法都发生在HTTP层上,这使你能够操纵请求和响应,设置缓存等等.nginx是一个可爱的工具,可能远远超过独角兽的可能性(并且不会真正减慢你的速度)