Mac防火墙阻止来自外部的nginx(端口80)

Ale*_*scu 10 firewall web nginx osx-mountain-lion macos

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

从外部在计算机上执行 nmap 显示

80/tcp   filtered http
Run Code Online (Sandbox Code Playgroud)

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

任何想法我应该做什么?谢谢!

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

Eug*_*ene 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
Run Code Online (Sandbox Code Playgroud)

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

sudo /usr/libexec/ApplicationFirewall/socketfilterfw --unblockapp /usr/local/bin/nginx
Run Code Online (Sandbox Code Playgroud)


dos*_*ssy 0

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

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

$ sudo /usr/libexec/ApplicationFirewall/socketfilterfw -t nginx
Run Code Online (Sandbox Code Playgroud)

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