我刚刚把我的开发环境从一台旧机器移到了一台新的MAC上。我喜欢把MAMP用于我的一般本地环境(更简单的项目),但是出于某种原因,最近版本的MAMP想让我把端口8888用于我的localhost。
我把它改回了端口80,这是我在旧机器上的MAMP上的端口,而且我有一些绝对的开发链接,所以我不想麻烦地把localhost:8888而不仅仅是localhost放在我的Uri:s的开头
结果是无法访问任何资源,一切都是禁止的。将端口改回8888,它工作正常。
为什么会出现这种情况?
其他人似乎在一个月前(X1 E0 F1 X)也遇到了同样的问题,但没有解决方案。
- --------更新
lsof -I传输控制协议:80
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
Google 973 mattias 28u IPv6 0x269b774a91275221 0t0 TCP localhost:54383->localhost:http (CLOSE_WAIT)
Google 973 mattias 36u IPv6 0x269b774a91275881 0t0 TCP localhost:54384->localhost:http (CLOSE_WAIT)
httpd 5444 mattias 4u IPv6 0x269b774a912738a1 0t0 TCP *:http (LISTEN)
httpd 5445 mattias 4u IPv6 0x269b774a912738a1 0t0 TCP *:http (LISTEN)
httpd 5446 mattias 4u IPv6 0x269b774a912738a1 0t0 TCP *:http (LISTEN)
httpd 5447 mattias 4u IPv6 0x269b774a912738a1 0t0 TCP *:http (LISTEN)
httpd 5448 mattias 4u IPv6 0x269b774a912738a1 0t0 TCP *:http (LISTEN)
httpd 5449 mattias 4u IPv6 0x269b774a912738a1 0t0 TCP *:http (LISTEN)
httpd 5461 mattias 4u IPv6 0x269b774a912738a1 0t0 TCP *:http (LISTEN)
httpd 5468 mattias 4u IPv6 0x269b774a912738a1 0t0 TCP *:http (LISTEN)
httpd 5476 mattias 4u IPv6 0x269b774a912738a1 0t0 TCP *:http (LISTEN)
httpd 5477 mattias 4u IPv6 0x269b774a912738a1 0t0 TCP *:http (LISTEN)
httpd 5478 mattias 4u IPv6 0x269b774a912738a1 0t0 TCP *:http (LISTEN)
此外,http://localhost/MAMP/也可以正常工作
当我尝试访问webroot中我自己的任何文件夹时,我被禁止:
如果我尝试一级文件夹(即http://localhost/myapp/,位于webroot/myapp中),我只会得到
您没有权限访问该资源,请稍后重试!
但如果我尝试使用子文件夹或PHP文件,例如http://localhost/myapp/subfolder/或http://localhost/myapp/subfolder/index.php
然后我就得到了
禁止访问您没有权限访问此资源。服务器无法读取htaccess文件,为安全起见拒绝访问
如果我将MAMP配置为使用不同的端口,一切都可以正常工作。但我不想在dev env中指定路由中的端口,因为我正在使用的应用程序有一些硬编码的URI:s。
此外,这是一个奇怪的行为,惹恼了我=)我的另一个MAC没有这样做,所以我想得到它的底部...
----另一个更新
我已经把我的web根目录(htdocs我相信MAMP默认叫它)移到了我的用户文件夹(user/Home/Documents/www),如果它与权限相关的话,但是我不明白为什么它在端口8888下工作得很好,而在80下就不行了......这不像Apache根据它运行的端口来访问我的文件夹......
-------请求的信息
我偶尔会启动一个节点服务器,只是为了检查一个人的工作,但目前没有运行。当它运行在端口3000下运行。
.htaccess到我的站点/文件夹:重写引擎在重写条件%{HTTP_HOST} ^域名.com$ [NC,OR]上重写条件%{HTTP_HOST} ^www.domain-name.com $重写条件%{请求URI}!文件夹/重写规则(.*)/文件夹/$1 [L]
Mac版本大苏尔11.3.1
MAMP版本6.3
5条答案
按热度按时间blpfk2vs1#
发生这种情况是因为有其他应用程序使用端口80。想到的一个是skype。您可以尝试lsof -i tcp:80来查看哪些进程正在锁定端口80。
xn1cxnb42#
我已经把我的webroot(htdocs我相信MAMP默认叫它)到我的用户文件夹(user/Home/Documents/www),如果它是以某种方式相关的权限,但我不明白为什么它然后在端口8888下工作正常,而不是在80下...
这就是问题所在。我不知道为什么不同的端口会有不同的行为,但是将wwwroot设置为MAMP/htdocs并将我的应用程序移到那里解决了这个问题。
我不会将此标记为答案,以防有人可以解释为什么MAMP获得权限wwwroot时,它在我的主文件夹,只要它运行在端口8080或其他东西,而没有权限,而在端口80,这将是这个问题的最佳答案...
bfrts1fy3#
我能想到的原因可能有很多。我还想为每一个原因提出一个解决方案。
首先,Mac(达尔文)是基于Linux的,这意味着1024以下的端口是特权端口,任何运行在3环(userland)的应用程序都不能访问这些端口。
您需要使用
sudo
权限运行应用程序。这当然会带来安全风险,并且应该在适当的考虑之后才这样做。通常您不应该使用sudo
运行Web服务器(和开发环境,如MAMP)。请参阅我的最后一点,以获得解决方案,这通常在许多生产环境中用作最佳实践。第二,很有可能你试图以root身份运行它,但是端口仍然无法访问。这可能是因为端口已经被另一个应用程序占用了。
要检查这一点,你可以发出
lsof -i tcp:80
,我可以看到你无论如何都做了。杀死其他为你阻止这个端口的应用程序。有时退出应用程序是不够的,你可能必须使用sudo kill -9 pid
。更多信息在这个man page中。第三,Mac特有的问题可能是(我认为这是你的情况,因为你在访问webroot和子文件夹时看到不同的错误),要么是网关守卫阻止MAMP访问目录,要么是
chmod
权限不正确(* 因为我看到了.htaccess投诉 *)。System Preference -> Pivacy & Security -> General
是否未阻止应用程序。Full Disk Access
或System Preference -> Pivacy & Security -> Privacy
下可用的Files and Folders
为MAMP启用目录访问chmod
755权限,在.chmod -R 755 DIRECTORY
文件上设置一个644权限。最后,如果没有其他方法,您可以在其他端口上运行MAMP,然后使用
iptables
将所有本地流量从端口80重定向到该端口。这也是Web服务器在生产环境中的实际配置方式,如果它们没有隐藏在负载平衡器或反向代理之后的话。请参考AskUbunu帖子中的说明。yqlxgs2m4#
Jorge Aranda费尔南德斯的答案对我很有用,当时我正在尝试让MAMP Pro的演示版工作。我已经在8888端口上运行MAMP Free很多年了,所以我一直在尝试让MAMP Pro在80端口上运行,以保持它们的独立性。作为一个链接的图像可能会持续,也可能不会持续,这些是完整的说明。
注意:原作者说这是对端口8888的修复(确实是)。但是,最初的问题是关于访问端口80的,这也修复了。
MAMP Pro内
1.在主面板的左上角,选择
Expert View
图标作为查看模式。1.从左侧选择
SETTINGS
下的Hosts
。然后选择Names
下的localhost
。1.共有7个选项卡。选择
Apache
。1.在
Options for <Directory> directive:
下,确保第一个框Indexes
有一个勾号。1.底部有
Revert
和Save
两个按钮,点击Save
,系统会提示重启服务器。1.在您的浏览器中测试
https://localhost:80
,它现在应该连接。daolsyd05#
设置Apache选项卡时,请选中“索引”框:
这样你就可以访问你的
localhost:8888
了。