【问题标题】:Virtual Hosts on Mac directing to ServerRootMac 上的虚拟主机指向 ServerRoot
【发布时间】:2018-11-08 18:55:55
【问题描述】:

我主要使用 XAMPP 来满足我的本地开发需求,但我觉得是时候放下拐杖,从命令行界面工作了。

我遇到的问题是我的虚拟主机指向 ServerRoot,而不是虚拟主机指向的位置。我目前正在尝试的是 laravel 应用程序,所以我的文件结构是

/usr/local/var/www/domain1/laravel

/usr/local/var/www/domain1/public_html

这是我的配置文件

# /etc/apache2/httpd.conf
ServerRoot "/usr/local/var/www"
ServerName 127.0.0.1
DocumentRoot "/usr/local/var/www"

# /etc/apache2/extra/httpd-vhosts.conf
<VirtualHost *:80>
      DocumentRoot "/usr/local/var/www/mydomain.com/public_html"
      ServerName dev.mydomain
      ServerAlias www.dev.mydomain
      ErrorLog "/private/var/log/apache2/dev.mydomain/error_log"
      CustomLog "/private/var/log/apache2/dev.mydomain/access_log" common
</VirtualHost>

# /ect/hosts
127.0.0.1   localhost
127.0.0.1   dev.mydomain
::1         localhost
::1         dev.mydomain

当我在浏览器中访问 dev.mydomain 时,它会将我带到 /usr/local/var/www 而不是 /usr/local/var/www/mydomain/public_html

我已经重启了服务器。

编辑 1:

当我遍历文件路径时,php 文件也没有解析,而是作为常规文本文件打开。

编辑 2:

我将httpd.conf DocumentRoot 注释掉并重新启动了apache,但问题仍然存在。当我执行 apachectl -t -D DUMP_VHOSTS 时,虚拟配置返回空白。我已取消注释 Include /private/etc/apache2/extra/httpd-vhosts.conf 以及 LoadModule vhost_alias_module。

我变了

包括/private/etc/apache2/extra/httpd-vhosts.conf

包括 /etc/apache2/extra/httpd-vhosts.conf

但它们都链接到同一个文件。

编辑 3:

执行apachectl -S 返回的服务器根目录与我建立的不同。 `apachectl -t -D DUMP_VHOSTS 也返回空。我认为我可能运行的 apache 版本可能与 OSX 上的默认版本不同。几年前我玩过它。有没有办法知道当前运行的 Apache 配置路径在哪里?

编辑 4:

我检查了 httpd 的运行位置,发现我运行的 apache 与默认的不同。

MacBook-Pro:extra Daniel$ whereis httpd
/usr/sbin/httpd
Daniels-MacBook-Pro:extra Daniel$ /usr/sbin/httpd -V
Server version: Apache/2.4.29 (Unix)
Server built:   Jan 17 2018 18:20:31
Server's Module Magic Number: 20120211:68
Server loaded:  APR 1.5.2, APR-UTIL 1.5.4
Compiled using: APR 1.5.2, APR-UTIL 1.5.4
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"

我在另一个配置中再次取消注释 vhosts 行,但现在我在重新启动时收到错误提示

httpd:/usr/local/etc/httpd/httpd.conf 第 69 行的语法错误:无法将 lib/httpd/modules/mod_mpm_prefork.so 加载到服务器中:dlopen(/usr/local/var/www/lib /httpd/modules/mod_mpm_prefork.so, 10): 找不到图片

【问题讨论】:

  • httpd.conf中注释掉DocumentRoot
  • include 中的 vhosts 文件是否存在 httpd.conf?好的,是的。但路径不同。写出正确的路径。
  • 我也编辑过。路径不同。
  • @Andra 我检查了那个路径,/private 文件夹链接到与根目录中相同的 /etc。
  • 顺便说一句,然后ErrorLogCustomLog 指向不存在的路径?

标签: apache unix localhost virtualhost


【解决方案1】:

好的,问题是几年前我用 Homebrew 安装了 apache 并忘记了。我正在配置 OSX apache 配置文件。要找出正在使用的配置文件,请使用:

$ whereis httpd
/usr/sbin/httpd
$ /usr/sbin/httpd -V

Server version: Apache/2.4.29 (Unix)
Server built:   Jan 17 2018 18:20:31
Server's Module Magic Number: 20120211:68
Server loaded:  APR 1.5.2, APR-UTIL 1.5.4
Compiled using: APR 1.5.2, APR-UTIL 1.5.4
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" <- where you config is, mine wasn't here

模块未加载的原因是我很久以前更改了 ServerRoot 行并且没有意识到这一点。默认的 ServerRoot 是 /usr/local/opt/httpd,其中包含 lib 目录,这是模块所在的位置和加载的位置。在我更改路径之前将 httpd.conf 重置为默认值并查看该目录有助于我抓住它。

【讨论】:

    猜你喜欢
    • 2010-10-07
    • 2020-09-11
    • 2014-11-04
    • 2014-11-19
    • 2012-09-20
    • 2020-12-01
    • 2016-02-26
    • 2018-10-02
    • 2020-12-17
    相关资源
    最近更新 更多