无法在端口 80 上运行 webrick

无法在端口 80 上运行 webrick

我试图弄清楚如何将 abcd:3000 指向我的域名。这里,abcd 是我的 IP 地址。

根据这篇文章:

如何使用 DNS/主机名或其他方式解析特定 IP:端口

我的印象是我需要将 Webrick 设置为在端口 80 上托管,因为这是默认的假定端口,因此我可以将 abcd 映射到我的域名,并且 mydomain.org 将访问我的网站。

这是一个正确的假设吗?或者我的做法是错误的?

无论如何,我无法让 Webrick 使用端口 80,我收到以下错误:

WARN TCPServer Error: Permission denied - bind(2)

检查端口 80 上的监听器:

$ netstat -tlnp
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.0.1:53            0.0.0.0:*               LISTEN      -               
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN      -               
tcp        0      0 127.0.0.1:8089          0.0.0.0:*               LISTEN      3266/banshee    
tcp6       0      0 ::1:631                 :::*                    LISTEN      -               

没有其他进程使用端口 80。

从其他帖子中,我得到的印象是映射到 1024 以下的端口是不可能的。

运行以下命令:

iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080

现在,将 Webrick 设置在端口 8080 上,我仍然无法从 abcd 访问我的网站!(也无法访问 abcd:80)

这种情况应该不是什么罕见的情况,我错过了什么?如果这很重要,我会使用 Webrick 的标准 Rails 4 开发环境,因为我只期望每月有 100 次页面浏览量。

答案1

普通用户 ( uid != 0) 无法在类 UNIX 系统上绑定 <1024 的端口。您可以采取一些iptables黑客手段或以以下方式运行 Werbick root(或此处描述的其他方法),但我不建议这样做。

使用合适的 Web 服务器,例如 Apache、nginx 或 lighttpd,并让其代理所有流量到您的 Webrick。这应该只需要 5 行配置,您最终将获得一个可以更好地控制和修改的设置。

答案2

尝试在不同的端口上运行,例如以非 root 用户身份在 tcp/8080 上运行

另外,运行lsof |egrep "80|http",查看 tcp/80 上运行的内容

可能只是 webrick 坏了... 如果是 rails 应用,可以试试 mod_passenger

相关内容