代码之家  ›  专栏  ›  技术社区  ›  Dan Micah Johnson

Mac上指向ServerRoot的虚拟主机

  •  1
  • Dan Micah Johnson  · 技术社区  · 7 年前

    我主要是使用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,但问题仍然存在。当我执行apachell-t-d转储时,虚拟配置将变为空白。我有include/private/etc/apache2/extra/httpd-vhosts.conf未注释,以及loadmodule vhost_alias_模块。

    我变了

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

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

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

    编辑3:

    apachectl -S 返回与我建立的服务器根目录不同的服务器根目录。` apachell-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:第69行/usr/local/etc/httpd/httpd.conf中的语法错误:无法将lib/httpd/modules/mod_mpm_prefork.so加载到server:dlopen(/usr/local/var/www/lib/httpd/modules/mod_mpm_prefork.so,10):找不到映像

    1 回复  |  直到 7 年前
        1
  •  1
  •   Dan Micah Johnson    7 年前

    好吧,问题是几年前我用自制软件安装了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重新设置为默认值,并在更改路径之前查看该目录,这有助于我捕获它。