我试图弄清楚如何将 abcd:3000 指向我的域名。这里,abcd 是我的 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