Виртуальные хосты на Mac направляются на ServerRoot - PullRequest
0 голосов
/ 30 мая 2018

Я в основном использовал 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, а также модуль vhost_alias_module LoadModule.

Я изменил

Включите / private / etc / apache2 /extra / httpd-vhosts.conf

до

Включить /etc/apache2/extra/httpd-vhosts.conf

, но ониобе ссылки на один и тот же файл.

Редактировать 3:

Выполнение apachectl -S возвращает обратно корень сервера, отличный от того, что я установил.`apachectl -t -D DUMP_VHOSTS также возвращает пустое значение.Я думаю, что возможно я использую другую версию apache, чем та, которая была установлена ​​по умолчанию в OSX.Я играл с этим несколько лет назад.Есть ли способ узнать, где находится текущий путь конфигурации Apache?

Edit 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 на сервер: dlopen (/usr/local/var/www/lib/httpd/modules/mod_mpm_prefork.so, 10): изображение не найдено

1 Ответ

0 голосов
/ 30 мая 2018

Хорошо, проблема была в том, что я установил apache несколько лет назад с Homebrew и забыл.Я настраивал файлы конфигурации 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 до значения по умолчанию и поиск в этом каталоге до того, как я изменил путь, помогли мне его поймать.

...