【问题标题】:Mac OS Mountain Lion - Apache running but localhost not working [closed]Mac OS Mountain Lion - Apache 正在运行但 localhost 无法正常工作 [关闭]
【发布时间】:2012-09-05 21:56:07
【问题描述】:

我使用命令在 Mac OS Mountain Lion 上加载了 Apache Web 服务器

sudo apachectl start

但是,当我尝试在 Firefox 中打开 localhost 时,我收到了消息

未找到:在此服务器上未找到请求的 URL /。 Apache/2.2.21 (Unix) DAV/2 服务器在 localhost 端口 80

我编辑了 httpd.conf 和 httpd.conf.default 来改变

#ServerName www.website.com

ServerName localhost

还是不行。有什么建议吗?

【问题讨论】:

  • 找到任何解决方案了吗?
  • 我正在用 html 和 css 编写一个网站,并使用服务器端包含来实现一致的设计并避免不必要地重复代码。这是题外话吗?如果没有,我需要让我的计算机处理服务器端包含,以便我可以测试我的代码。从这个意义上说,apache 是一个工具,它使我能够测试我的代码而无需上传到我的虚拟主机,因此让 apache 在山狮下运行对我来说至关重要。我会假设会有其他的 web 程序员有同样的经历并且可以为解决方案做出贡献。
  • 我遇到了类似的问题。 restart 命令没有给出任何错误或输出,这让我想知道发生了什么。检查端口,我发现 apache 没有运行。运行这个命令/usr/sbin/httpd -D FOREGROUND实际上帮助我看到了实际的错误信息并成功启动了apache。

标签: macos apache unix localhost osx-mountain-lion


【解决方案1】:

注释掉所有IfDefine !WEBSERVICE_ON 标签,保留内容——Mountain Lion 上没有WEBSERVICE

【讨论】:

    【解决方案2】:

    要验证进程是否正在侦听端口 80,您可以在终端窗口中使用 lsof:

    $ sudo lsof -iTCP:80 -sTCP:LISTEN
    COMMAND   PID USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
    httpd      88 root    4u  IPv6 0xffffff8018804600      0t0  TCP *:http (LISTEN)
    httpd      90 _www    4u  IPv6 0xffffff8018804600      0t0  TCP *:http (LISTEN)
    httpd   14843 _www    4u  IPv6 0xffffff8018804600      0t0  TCP *:http (LISTEN)
    

    这将验证您是否已成功启用 apache。

    (我已经安装了 xcode,但我认为 lsof 是正常安装的一部分)

    添加:

    这证实了 apache 正在侦听端口 80。我将采取的下一步是查看访问日志,以查看当您请求“/”时 apache 记录的内容,如 apache 返回到浏览器的错误所示。这就是我的显示。请注意,http GET 请求显示的返回码为 200(成功):

    bash-3.2# grep 'GET / ' /private/var/log/apache2/access_log 
    127.0.0.1 - - [12/Sep/2012:16:46:45 -0400] "GET / HTTP/1.1" 200 44
    127.0.0.1 - - [12/Sep/2012:16:49:44 -0400] "GET / HTTP/1.1" 200 44
    

    您还可以通过刷新浏览器窗口来确认浏览器请求的 url,然后确认 apache 将该新请求记录到 access_log。

    【讨论】:

    • 我试过了,得到了几乎相同的结果(显然,设备 ID 略有不同),除了 PID 是:19275、19277 和 19285。
    • 好的,这样可以确认 apache 正在运行并正在监听,但回想起来,从原始问题中返回到浏览器的 apache 错误中可以清楚地看到这一点。
    • 这是一个非常好的彻底答案。继续加油!
    • 您说“这证实 apache 正在侦听端口 80”……这证实了这一点?不成功的输出是什么样的?
    • @jeff:sudo lsof -iTCP:80 -sTCP:LISTEN 命令列出了所有正在监听端口 80 的进程,在我的示例中,您可以看到一个 httpd 实例正在监听。如果不是,您应该看不到该命令的输出。您可以通过将80 替换为任何未使用的端口号来查看它的外观。 (试试 88888 之类的)
    【解决方案3】:

    您应检查“httpd.conf”中指定为“DocumentRoot”的文件夹的权限,并至少允许 Apache 用户读取访问权限(默认情况下应为“_www”)。
    否则,您可以在“DocumentRoot”文件夹上执行“sudo chmod 755”。
    顺便说一句,您应该只修改“httpd.conf”文件,因为“httpd.conf.default”是一个默认配置,如果您想恢复 Apache 原始配置,只需覆盖“httpd.conf”即可。 conf”文件和“httpd.conf.default”文件。
    我想您没有启用基于名称的虚拟主机,因为当您启用基于名称的虚拟主机时,主配置中的文档根目录将被忽略;相反,将使用匹配主机名的根目录,如果不匹配,则默认为第一个虚拟主机。
    最后,当您遇到问题时,首先要检查的始终是 Apache 错误日志文件。
    通过查看 Apache 配置文件中的“ErrorLog”指令可以找到错误日志的位置。

    【讨论】:

    • 谢谢。我尝试了以下方法:
    • 对不起,上次不小心按了返回键。这就是我输入的内容:谢谢。我做了以下事情:(1)正确设置 DocumentRoot 的权限,(2)恢复对 httpd.conf.default 的更改,(3)检查错误日志并发现:“[client ::1] 文件不存在:/ usr/htdocs"
    • @Spartanblogger 错误“文件不存在:/usr/htdocs”表示您的 Apache 配置文件中有错误。您在“httpd.conf”中的哪里设置了“/usr/htdocs”?
    • 成功了吗?我被困在同一点上。已经尝试了所有方法,但无法消除 Forbidden 错误
    • @Raj 您在错误日志中遇到了哪个错误?
    猜你喜欢
    • 2012-08-17
    • 2013-09-09
    • 2015-06-06
    • 2011-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-01
    • 1970-01-01
    相关资源
    最近更新 更多