【问题标题】:Make Rails Server port 3000 accessible via domain name (AWS EC2, Cloudflare)通过域名(AWS EC2、Cloudflare)使 Rails Server 端口 3000 可访问
【发布时间】:2020-06-15 07:37:23
【问题描述】:

我有一个希望通过特定域名访问的开发环境,即。 “example.com”。这是一个合法的开发环境(整个 puma +sqlite 3 RoR 启动工具包),我想让它能够使用域名进行访问。

目前可以通过附加 :3000 访问来自 AWS EC2 的弹性 IP。 IPAddress:3000 有效(ec2-NUMBERSHERE.ap-southeast-1.compute.amazonaws.com:3000 通过网络浏览器)。我首先运行screen bundle exec rails server -b 0.0.0.0 是的,我在AWS EC2 中运行我的开发环境。这是故意的。

在我的 Cloudflare 帐户中,我已将类型 A 映射到名称“example.com”,并将内容映射到弹性公共 ip。我已将 CNAME 类型映射到名称“wwww”,并将内容映射到公共 DNS。

如何使用 example.com 实现与 IPAddress:3000 相同的功能?

**我知道这是忽略的最佳实践,但问题实际上就是这样。

【问题讨论】:

    标签: ruby-on-rails amazon-ec2 cloudflare


    【解决方案1】:

    我认为您在 DNS 级别上无能为力。您可以做的是使用 -p 选项更改 Rails 服务器默认端口:

    $ screen bundle exec rails server -b 0.0.0.0 -p 80
    

    但是,您需要以 root 权限运行 rails server 才能使用 80 端口(以及低于 1024 的任何其他端口)。

    更好的选择是在 localhost 上绑定 rails server(这是默认行为)并使用 proxy_pass 功能将 Nginx 作为反向代理添加到端口 80 中侦听,如下所示:

    server {
      listen 80;
      listen [::]:80;
    
      server_name example.com;
    
      location / {
          proxy_pass http://localhost:3000/;
      }
    }
    

    【讨论】:

    • 我有root权限。如何使用 sudo 执行此操作?我在 Ubuntu 上
    • 我得到 Permission denied - bind(2) for "0.0.0.0" port 80 (Errno::EACCES)
    【解决方案2】:

    我可以通过使用 iptables 将端口 80 的流量转发到 3000 来做到这一点。

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

    之后运行screen bundle exec rails server -b 0.0.0.0 工作!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-08
      • 1970-01-01
      • 2016-01-27
      • 1970-01-01
      • 2020-05-01
      • 2020-09-23
      • 2020-12-18
      • 2020-01-19
      相关资源
      最近更新 更多