【问题标题】:Why would apache refuse connection to localhost 127.0.0.1 on OSX?为什么 apache 会拒绝连接到 OSX 上的 localhost 127.0.0.1?
【发布时间】:2017-01-14 19:31:27
【问题描述】:

当尝试访问我的本地主机上的站点时,连接被拒绝。两天前,该设置在配置多个虚拟主机时没有问题。我不知道任何可能影响设置的更改。我昨天花了一整天试图解决这个问题,但一直在绕圈子。

操作系统:OSX 10.11.16

httpd -V 返回:

Server version: Apache/2.4.18 (Unix)
Server built:   Feb 20 2016 20:03:19
Server's Module Magic Number: 20120211:52
Server loaded:  APR 1.4.8, APR-UTIL 1.5.2
Compiled using: APR 1.4.8, APR-UTIL 1.5.2
Architecture:   64-bit
Server MPM:     prefork
   threaded:     no
   forked:     yes (variable process count)
Server compiled with....
 -D APR_HAS_SENDFILE
 -D APR_HAS_MMAP
 -D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
 -D APR_USE_FLOCK_SERIALIZE
 -D APR_USE_PTHREAD_SERIALIZE
 -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
 -D APR_HAS_OTHER_CHILD
 -D AP_HAVE_RELIABLE_PIPED_LOGS
 -D DYNAMIC_MODULE_LIMIT=256
 -D HTTPD_ROOT="/usr"
 -D SUEXEC_BIN="/usr/bin/suexec"
 -D DEFAULT_PIDLOG="/private/var/run/httpd.pid"
 -D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
 -D DEFAULT_ERRORLOG="logs/error_log"
 -D AP_TYPES_CONFIG_FILE="/private/etc/apache2/mime.types"
 -D SERVER_CONFIG_FILE="/private/etc/apache2/httpd.conf"

httpd.conf 被配置为允许虚拟主机,并且 httpd-vhosts.conf 文件中没有任何变化。

LoadModule vhost_alias_module libexec/apache2/mod_vhost_alias.so
...
# Virtual hosts
Include /private/etc/apache2/extra/httpd-vhosts.conf

apachectl configtest 返回:

Syntax OK

我已尝试对 127.0.0.1 运行端口扫描,但 http 端口 80 不显示。这和被拒绝的连接让我认为这是问题所在,但我不知道为什么。 OSX 防火墙已关闭。 I've tried the solution posted here 但它没有修复它。

我的 /etc/hosts 文件如下所示:

#
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting.  Do not change this entry.
#    

127.0.0.1       localhost
255.255.255.255 broadcasthost
::1             localhost
fe80::1%lo0     localhost
127.0.0.1       site.local
127.0.0.1       othersite.local
...

我可以 ping 127.0.0.1。我以前安装了 homebrew 来运行不同的 PHP 版本,但我已经删除了它以尝试将系统恢复到库存。我真的不知道接下来要尝试什么,任何帮助将不胜感激。

【问题讨论】:

  • sudo apachectl start 可能吗?
  • @MarkSetchell 在过去的两天里,我一直在不断地重新启动 apachectl,但没有任何运气。我知道它会在启动时自动启动,而我并没有停止它。尽管如此,当我尝试它时,我得到了/System/Library/LaunchDaemons/org.apache.httpd.plist: service already loaded,我认为这意味着它已经开始了?
  • 确定你的配置已经配置了80端口?
  • @P.J.Meisch 我在哪里可以检查?
  • 用于/private/etc/apache2/extra/httpd-vhosts.conffile 中的vhosts,默认是定义/private/etc/apache2/httpd.conf'. Look for the Listen`directive

标签: macos apache localhost


【解决方案1】:

在尝试调试几天后,我通过用升级到 osx elcapitan 时创建的旧文件覆盖我的 httpd.conf 文件解决了这个问题。

sudo cp httpd.conf~elcapitan httpd.conf

执行此操作后,localhost 可以再次访问。我不知道我以前的 httpd.conf 文件出了什么问题。我已经通过它多次寻找问题,但从未发现任何问题。我什至对这两个文件进行了比较,以尝试查看问题出在哪里,并没有发现它会以这种方式失败的原因。

一旦我的 localhost 再次响应,我就完成了启用我需要的模块并重新配置我的虚拟主机的过程。

同样,我不知道另一个 httpd.conf 文件出了什么问题。也许它以某种方式被破坏了。不管它在apachectl configtest 没有报告任何问题时静默失败。

因此,如果其他人有类似的问题,可能值得恢复到较旧的 httpd.conf 文件。 OSX 通常会在升级完成时创建备份。

【讨论】:

    【解决方案2】:

    您可以检查以确保您的 /usr/local/etc/apache2/2.4/httpd.conf 配置文件中有 Listen: 80

    【讨论】:

      【解决方案3】:

      升级php时发生在我身上。以下步骤对我很有帮助,让我重回正轨。

      通常,mac 在升级之前会创建一个备份。因此,我们将使用 httpd.conf 的更新前版本

      cd /etc/apache2/  
      sudo mv httpd.conf httpd.conf-afterupdate  
      sudo mv httpd.conf.pre-update httpd.conf  
      sudo apachectl configtest  
      sudo apachectl restart  
      

      【讨论】:

      • 谢谢。这正是我的情况。恢复到旧的conf。文件帮助
      • 对我来说,升级后 PHP 模块的路径不正确。我更新了以LoadModule php7_module 开头的行,以使用libphp7.so 的正确文件夹路径
      • 这正是我想要的
      【解决方案4】:

      在我的例子中,httpd.conf 文件中的 DocumentRoot 是错误的。

      我在终端输入 httpd 后发现了。试试同样的方法,也许它可以给你一些解决问题的提示。

      ➜  ~ httpd
      AH00526: Syntax error on line 255 of /usr/local/etc/httpd/httpd.conf:
      DocumentRoot '/Users/xx/Desktop/sites' is not a directory, or is not readable
      

      【讨论】:

        猜你喜欢
        • 2018-09-25
        • 1970-01-01
        • 2023-03-18
        • 2020-01-21
        • 2011-07-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-15
        相关资源
        最近更新 更多