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


10

我使用端口安装了nginx并使用sudo启动了它。从本地主机访问nginx欢迎页面可以正常工作,但是从外部计算机访问它会失败。

从外部在计算机上进行一次nmap显示

80/tcp   filtered http

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

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

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


我没有答案,但是这里有几件事情要看:检查/var/log/appfirewall.log以查看它是否有用,并运行sudo lsof -i:80以确保它确实是nginx进行监听(并且它正在监听所有IP,而不仅仅是127.0.0.1)。
Gordon Davisson

嗨,戈登,谢谢你的建议!当我尝试连接时,我的防火墙日志如下所示:Dec 18 02:12:56 MacBook-Pro.local socketfilterfw [80663] <Info>:拒绝从my.ip.is.here:55843连接到端口80 proto = 6这是侦听表的输出:nginx 80437根6u IPv4 0x35ec104ccb86c175 0t0 TCP *:http(LISTEN)nginx 80438没人6u IPv4 0x35ec104ccb86c175 0t0 TCP *:http(LISTEN)看起来一切应该正确,但是仍然被阻塞:(
Alex Ionescu

您是否可能有两个Nginx可执行文件,一个在防火墙中被允许,而另一个则不允许?这是我唯一能想到的...
Gordon Davisson 2012年

Answers:


10

这对我有用(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

尝试通过symlink进行操作(以避免在升级nginx时重做此过程)时,出现以下错误: 运行后,该应用程序不属于防火墙

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

我收到相同的消息“该应用程序不是防火墙的一部分”,在我的案例中,这是一个区分大小写的问题……我写了地窖而不是地窖。当我使用Capital C时,它起作用了!!谢谢
Ofer Segev

3

一直试图弄清楚这一点,最终在终端中执行以下操作:

$ 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防火墙上的“已批准的应用程序”列表中。


这些步骤对我有用,但我还必须重新启动nginx网站才能真正开始加载。
河马

0

我遇到了同样的问题。我怀疑这与nginx的master / worker流程模型有关,这混淆了Apple的appfirewall实施。

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

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

我不记得这种情况是否在重启后仍然存在。如果不是,请在/ Library / LaunchAgents中创建一个启动plist,以便在引导时执行此操作。


1
在10.8上不起作用。它抱怨-t是无效的选项。此外,如果我通过--add`which nginx`添加,它将添加它,但是如果我使用--remove选项将其删除,则无法识别它。
布伦丹

这在Mac OS X 10.9.3上也不起作用。苹果已删除该-t选项。
小清庞-明日香贤治

0

改变你的$ PATH

让系统找到nginx的/usr/local/Cellar/nginx/nginx-xx/bin/nginx首先


0

我在El Capitan(10.11.6)上。您可以nginx使用GUI 手动从防火墙中排除。这为我解决了。

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

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

在此处输入图片说明

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.