将Rails服务器绑定到Linux上的端口80,而不以根用户身份运行

我试图find一种方法来绑定我的生产Rails服务器端口80,而无需运行具有root权限的整个服务器。 我的问题基本上是相同的“ 有没有办法让非root进程绑定到”特权“端口(<1024)在Linux上? ”,除了我需要这样做的Rails。 目前,我引用的问题的前两个答案要么我授予Ruby解释器的CAP_NET_BIND_SERVICE权限(可能不是一个好主意),或者在启动服务器后删除root权限( 我不确定是否可以使用Ruby ) 。 有任何想法吗?

所以基本上,答案是你没有。 有可能有一些非常冒险的方式来完成这项工作,但是你真正想做这件事的几率是非常低的。 相反,在非特权端口上运行Rails,并设置一个像nginx一样的真正的Web服务器来转发到Rails。

作为一个非常简单的例子,使用nginx,你可以使用一个如下所示的配置文件:

 upstream rails_server { server localhost:3000; } server { listen 80; location / { root /home/deploy_user/rails_app/public; try_files $uri @missing; } location @missing { proxy_pass http://rails_server; proxy_set_header Host $http_host; proxy_redirect off; } } 

这个解决方案也是更好的长期,因为它使您的基础设施更加灵活。 例如,如果您需要将应用程序扩展到多台机器,则可以使用nginx作为负载平衡器,并将请求转发到运行在不同机器上的大量Rails服务器。