主机名到本地主机带端口 - OSX

我正在尝试在我的机器上本地运行多个Node.js Web服务器。 因为我写的代码需要引用一个域名,我想保持一个约定,即将其指向从Node运行的非80端口服务(技术上来说,我正在运行一个Harp.js和一个Sails.js)。
  • 所以,dev.hostOne.com应该指向localhost:123
  • 而dev.hostTwo.com应该指向localhost:456
这种做法可行吗?如果是,怎样实现?
1个回答

从我的理解来看,似乎您只使用一个本地开发机器,意味着它没有连接到提供 DNS 的任何网络。 如果我没错的话,我建议按照以下描述来设置: 第一步:为您的 MAC OS 分配至少两个 IP 地址(每个域名一个),比如说:
192.168.0.10
192.168.0.11
要设置第二个IP,您需要添加第二个以太网适配器(逻辑上的,而非物理上的)。 步骤2:由于您没有DNS服务器,您可以通过在/etc/hosts文件中添加以下内容来进行设置:
192.168.0.10     dev.hostone.com
192.168.0.11     dev.hosttwo.com
第三步:为您的环回接口分配别名。
sudo ifconfig lo0 192.168.0.10 alias
sudo ifconfig lo0 192.168.0.11 alias
第四步:设置ipfw来转发数据包。
sudo ipfw add fwd 127.0.0.1,123 tcp from me to 192.168.0.10 dst-port 80
sudo ipfw add fwd 127.0.0.1,456 tcp from me to 192.168.0.11 dst-port 80
你完成了! 现在:

enter image description here enter image description here


我已经设置了两个Node.js Web服务器来测试您的情况:
$ netstat -anp tcp | grep -E "123|456"
tcp4    0    0  127.0.0.1:123    *.*    LISTEN
tcp4    0    0  127.0.0.1:456    *.*    LISTEN

重要提示:请注意,ipfw规则和回环接口别名在重启后将不再存在。因此,请考虑添加一个启动脚本。

2工作得非常出色。这正是我想要的。 - mondo
1太好了,它有效了!我相当确定它并不完全是一个“重复”;) - krisFR
在Mac OS Sierra上出现sudo: ipfw: command not found的错误提示。 - ClintM
5@ClintM:ipfw已被pfctl替代。有关如何打开端口的示例,请参考:https://gauravsohoni.wordpress.com/2015/04/14/mac-osx-open-port/ - Joe Atzberger
4更新pfctl预期格式的答案会非常好。 - Simon
如果ipfw不可用,您可以通过以下方式进行操作:https://gist.github.com/allexradu/52f88344f207960621d5f086fcaf4b69 - Allex Radu
不必经过那么多步骤,你可以在/etc/hosts中将不同的域名指向本地主机(127.0.0.1),然后安装一个Web服务器(例如Nginx),并在其中配置端口转发。具体操作可参考以下链接: https://serverfault.com/questions/536576/nginx-how-do-i-forward-an-http-request-to-another-port - Adrian Bienias
如果你想使用Caddy和Docker来实现这一点,而不使用ipfwpfctl,可以按照 https://github.com/bibstha/local-ssl-proxy 上的说明进行操作。这将设置一个带有SSL支持的反向代理。 - Bibek Shrestha