使用除 之外的任何方式访问本地服务(例如基于 Web 的 CUPS 配置(端口 631)或 Apache Tomcat(端口 8080))http://localhost:<port>
都会失败。但是,使用 OS X 附带的 Apache httpd 执行相同操作却没有问题。这是怎么回事?
http://192.168.1.5:631/ - fails
http://localhost:631/ - works
http://192.168.1.5:8080/ - fails
http://localhost:8080/ - works
http://192.168.1.5:80/ - works!!!
http://localhost:80/ - works
我知道“localhost”使用环回网络接口,而 192.168.1.5 不使用。因此,理论上 OS X 防火墙可能会干扰。但是,日志没有显示丢弃的请求。此外,防火墙关闭时的行为完全相同。
答案1
是的,我不知道端口不一定绑定到任何地址或任何接口,而是绑定到特定地址。
杯子
CUPS 配置默认专门绑定到 localhost。请参阅 /private/etc/cups/cupsd.conf 中的配置:
# Only listen for connections from the local machine.
Listen localhost:631
Listen /private/var/run/cupsd
如果您在“首选项”->“共享”中启用打印机共享,则 CUPS 也将在本地主机之外可用。
雄猫
我还不知道哪个设置可以让 Tomcat 仅绑定到本地主机。不过,目前我设置了 mod_jk,让 Tomcat 位于 Apache 后面。
答案2
监听端口可以绑定到特定的接口地址,也可以绑定到任意地址。
尝试命令:netstat -anp TCP
(可能略有不同——我现在不在 Mac 前面。您想显示所有监听的 TCP 端口及其数字地址。)
你应该看到类似这样的内容:
TCP 0.0.0.0:80 ...
TCP 127.0.0.1:631 ...
端口号前面带有 0.0.0.0 表示它将接受来自任何地方的连接。如果前面带有 127.0.0.1,则表示它只接受来自环回接口的连接。