为什么端口 80 的 MAMP (mac) 导致访问被禁止,而端口 8888 工作正常?

问题描述

我刚刚将我的开发环境从旧机器转移到新 MAC。我喜欢将 MAMP 用于我的一般本地环境(更简单的项目),但出于某种原因,最近版本的 MAMP 希望我将端口 8888 用于我的本地主机。

我将它改回端口 80,这是我在旧机器上的 MAMP 上的端口,并且我有一些绝对的开发链接,所以我不想麻烦地放置 localhost:8888只是在我的 Uri:s

开头的 localhost

结果是无法访问任何资源,一切都被禁止。将端口改回 8888,它工作正常。

为什么我会出现这种行为?

一个月前(Can't connect to port 80 in MAMP on MAc)其他人似乎也遇到了同样的问题,但没有解决

------------------- 更新

lsof -I tcp: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 根目录(我相信 MAMP 调用它的 htdocs)移动到我的用户文件夹(用户/主页/文档/www)中,但我不明白为什么它可以正常工作在端口 8888 下但不在 80 下......这不像 Apache 根据它运行的端口来访问我的文件夹......

-------请求的信息

我偶尔会启动一个节点服务器只是为了检查一个人的工作,但目前没有运行。当它打开时,它在端口 3000 下运行。

.htaccess 我的 web/ 文件夹: 重写引擎开启 RewriteCond %{HTTP_HOST} ^domain-name.com$ [NC,OR] RewriteCond %{HTTP_HOST} ^www.domain-name.com$ RewriteCond %{REQUEST_URI} !folder/ RewriteRule (.*) /folder/$1 [L]

Mac 版 Big Sur 11.3.1

MAMP 6.3 版

解决方法

发生这种情况是因为还有其他应用程序使用端口 80。我想到的一个是 Skype。您可以尝试 lsof -i tcp:80 以查看哪些进程正在锁定端口 80。

,

我已经移动了我的 webroot (htdocs 我相信 MAMP 默认调用它) 进入我的用户文件夹(用户/主页/文档/www),如果它以某种方式 权限相关,但我不明白为什么它可以正常工作 在端口 8888 下但不在 80 下......它不像 Apache 获得访问权限 根据它运行的端口到我的文件夹...

这就是问题所在。我不知道为什么不同端口的行为不同,但是将 wwwroot 设置为 MAMP/htdocs 并将我的应用程序移到那里解决了问题。

我不会将此标记为答案,以防万一有人可以解释为什么 MAMP 在我的主文件夹中获得 wwwroot 的权限,只要它在端口 8080 或其他端口上运行,而在端口 80 上没有权限,这将是这个问题的最佳答案...

,

我能想到的原因可能有多种。我还想为每个人提出一个解决方法。


首先,Mac (Darwin) 基于 Linux。这意味着 1024 范围内的端口是特权的。任何在环 3(用户空间)中运行的应用程序都无法访问这些端口。

您需要以 sudo 权限运行应用程序。这当然会带来安全风险,只有在适当考虑后才应该这样做。通常,您不应使用 sudo 运行 Web 服务器(以及 MAMP 等开发环境)。请参阅我最后一点的解决方案,该解决方案通常在许多生产环境中用作最佳实践。


其次,您很有可能尝试以 root 身份运行它,但仍然无法访问该端口。这可能是因为该端口已被另一个应用程序占用。

要检查这一点,您可以发出 lsof -i tcp:80,我可以看到您无论如何都这样做了。杀死为您阻止此端口的其他应用程序。有时退出应用程序还不够,您可能必须使用sudo kill -9 pid。此 man page 中有更多信息。


第三,Mac 特定问题可能是(我认为您就是这种情况,因为您在访问 webroot 和子文件夹时会看到不同的错误),要么是看门人阻止 MAMP 访问目录,要么是 {{1} } 权限不正确(因为我看到了 .htaccess 投诉)。

  • 首先检查 Mac Gatekeeper chmod 是否没有阻止应用程序。
  • 然后检查是否从 System Preference -> Pivacy & Security -> GeneralFull Disk Access 下的 Files and Folders 为 MAMP 启用了目录访问
  • 最后,您可以递归地对项目目录设置 System Preference -> Pivacy & Security -> Privacy 755 权限,对文件设置 644 权限。 chown。查看此 SupeUser 博文了解更多详情。

最后,如果没有其他工作,您可以在其他端口上运行 MAMP,然后使用 chown -R 755 DIRECTORY 从该端口的端口 80 重定向所有本地流量。如果 Web 服务器没有隐藏在负载均衡器或反向代理之后,那么这也主要是在生产环境中实际配置 Web 服务器的方式。有关说明,请参阅此 AskUbunu 帖子。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...