Mac 防火墙从外部阻止 nginx(端口 80)

Mac 防火墙从外部阻止 nginx(端口 80)

我使用 ports 安装了 nginx,并使用 sudo 启动它。从 localhost 访问 nginx 欢迎页面可以完美运行,但是从外部计算机访问它失败。

从外部对计算机执行 nmap 会发现

80/tcp   filtered http

显然,mac 防火墙阻止了该端口。然后,我继续将 nginx 可执行文件添加到防火墙例外列表中,但 nmap 仍然显示端口 80 被过滤,我无法访问该网页。列表中的确切二进制文件是 /opt/local/sbin/nginx,据我所知,这似乎是正确的

有什么想法我应该怎么做吗?谢谢!

PS 关闭防火墙确实允许我从外界访问该网站,但这不是一个理想的解决方案。

答案1

这对我有用(OSX 10.9):

sudo /usr/libexec/ApplicationFirewall/socketfilterfw --add /usr/local/Cellar/nginx/1.4.4/bin/nginx
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --unblockapp /usr/local/Cellar/nginx/1.4.4/bin/nginx

当尝试通过符号链接执行此操作时(以避免在 nginx 升级时重做此过程),出现以下错误: 该应用程序不属于防火墙的一部分 运行后:

sudo /usr/libexec/ApplicationFirewall/socketfilterfw --unblockapp /usr/local/bin/nginx

答案2

尝试解决这个问题很久了,最终在终端中执行以下操作:

$ sudo /usr/libexec/ApplicationFirewall/socketfilterfw --remove /usr/local/Cellar/nginx/1.10.0/bin/nginx
Application at path ( /usr/local/Cellar/nginx/1.10.0/bin/nginx ) removed from firewall

$ sudo /usr/libexec/ApplicationFirewall/socketfilterfw --add /usr/local/Cellar/nginx/1.10.0/bin/nginx
The application is already a part of the firewall

$ sudo /usr/libexec/ApplicationFirewall/socketfilterfw --unblockapp /usr/local/Cellar/nginx/1.10.0/bin/nginx
Incoming connection to the application is permitted

这似乎解决了这个问题。

我还将 nginx 应用程序拖到 OS X 防火墙上的批准应用程序列表中。

答案3

我也遇到了同样的问题。我怀疑这与 nginx 的主/工作进程模型混淆了 Apple 的 appfirewall 实现有关。

我发现的解决方案是告诉 appfirewall 允许 nginx 进程:

$ sudo /usr/libexec/ApplicationFirewall/socketfilterfw -t nginx

我不记得这个在重启后是否还会继续存在。如果不,您可以在 /Library/LaunchAgents 中创建一个启动 plist,以便在启动时执行此操作(如果您愿意)。

答案4

我使用的是 El Capitan (10.11.6)。您可以nginx使用 GUI 手动从防火墙中排除。这帮我解决了这个问题。

首先,进入“系统偏好设置”。然后进入“安全和隐私”,点击“防火墙”选项卡。

单击“防火墙选项”按钮并nginx在此处添加为排除的应用程序:

在此处输入图片描述

Nginx 位于/usr/local/Cellar/nginx/1.10.3/bin/nginx。我无法在“系统偏好设置”的文件资源管理器中导航到此处,因此为了解决这个问题,我nginx在桌面上创建了一个快捷方式并选择了它。

相关内容