apache2 неправильный главный Documentroot

Вопрос или проблема

У меня работает apache2, настроенный с двумя vhost.

Один сайт работает нормально. Но другой перенаправляется в неверный каталог.
Конфигурационные файлы идентичны, за исключением имен серверов и алиасов и, конечно, корневого каталога документа.

Я проверил с помощью apachectl -S, и там есть дополнительная запись
Main DocumentRoot: "/var/www/html"
Я не нашел .conf файла, где задан этот каталог.

Как я могу изменить его, чтобы указывать на каталог второго vhost, который показывает этот неверный каталог?

Моя конфигурация vhost (как в вопросе):

 <IfModule mod_ssl.c>

<VirtualHost *:443>
SSLEngine on
ServerName mydomain.com
ServerAlias mydomain.com
DocumentRoot /var/www/wordpress
SSLCertificateFile /etc/letsencrypt/live/domain1/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/domain1/privkey.pem

</VirtualHost>


</IfModule>

Другой аналогичен, только с другими каталогами и алиасами.

По сути, “Main DocumentRoot” – это DocumentRoot, определенный вне любого блока VirtualHost, и “/var/www/html” является заводским значением по умолчанию.

Этот более новый вопрос содержит хороший ответ на это: https://stackoverflow.com/q/56812397/6918262

Как уже подразумевает название, это значение DocumentRoot по умолчанию для виртуальных хостов, когда они сами не указывают таковое. Таким образом, если запрос соответствует блоку виртуального хоста, который не имеет директивы DocumentRoot для выполнения запроса, Apache использует корневой каталог документа по умолчанию или главный корневой каталог для выполнения запроса.

Корневой каталог документа Apache по умолчанию указан в двух местах:

  1. Опции времени компиляции или выполнения httpd.
  2. Основная конфигурация сервера, которая является конфигурацией, заданной вне блоков виртуальных хостов. Любая конфигурация виртуального хоста в основном берет значения по умолчанию из основной конфигурации сервера.

Примечание: Значение корневого каталога документа, указанное в основной конфигурации сервера, переопределит значение, унаследованное от опции времени компиляции или выполнения.

Пожалуйста, ознакомьтесь с этой ссылкой для получения дополнительной информации:

https://codingshower.com/apache-find-default-or-main-documentroot/#:~:text=The%20default%20or%20main%20document%20root%20acts%20as%20the%20default,and%20the%20main%20server%20config

Ответ или решение

Устранение проблемы с неправильным DocumentRoot в Apache2

Ваша проблема с неправильным DocumentRoot в конфигурации Apache2 связана с тем, что сервер использует основной DocumentRoot, заданный вне блоков виртуального хоста. Понимание того, как работает конфигурация Apache и как корректно настраивать виртуальные хосты, поможет вам решить эту проблему.

Почему возникает такая проблема?

Как вы уже заметили, в выводе команды apachectl -S отображается запись Main DocumentRoot: "/var/www/html". Это значит, что основное значение DocumentRoot, не переопределенное в блоках виртуального хоста, равно этому пути.

Apache ищет конфигурацию следующим образом:

  1. Основная конфигурация сервера (обычно в файлах вроде apache2.conf или httpd.conf). Здесь может быть установлен основной DocumentRoot, который будет использоваться по умолчанию.
  2. Конфигурация виртуальных хостов. Если виртуальный хост не имеет заданного DocumentRoot, Apache использует основной DocumentRoot.

Как изменить DocumentRoot для вашего второго виртуального хоста?

Для того чтобы изменить этот основной DocumentRoot и указать другой путь для вашего второго виртуального хоста, выполните следующие шаги:

  1. Редактирование конфигурационных файлов:

    • Откройте основной файл конфигурации Apache, например, /etc/apache2/apache2.conf или /etc/httpd/conf/httpd.conf.
    • Проверьте наличие строки, где определен основной DocumentRoot. Если такая строка присутствует, измените её на нужный вам путь или прокомментируйте её, если хотите явно задать DocumentRoot в каждом виртуальном хосте.
  2. Указание DocumentRoot в виртуальных хостах:

    • Обязательно проверьте оба файла виртуальных хостов, чтобы убедиться, что в каждом из них задан правильный DocumentRoot. Например, вы можете иметь следующие настройки:
      
      <IfModule mod_ssl.c>
      <VirtualHost *:443>
      SSLEngine on
      ServerName mydomain.com
      ServerAlias www.mydomain.com
      DocumentRoot /var/www/wordpress
      SSLCertificateFile /etc/letsencrypt/live/domain1/cert.pem
      SSLCertificateKeyFile /etc/letsencrypt/live/domain1/privkey.pem
      </VirtualHost>

    <VirtualHost *:443>
    SSLEngine on
    ServerName anotherdomain.com
    ServerAlias www.anotherdomain.com
    DocumentRoot /var/www/anotherdirectory
    SSLCertificateFile /etc/letsencrypt/live/domain2/cert.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/domain2/privkey.pem

  3. Перезагрузка Apache:

    • После внесения изменений не забудьте перезагрузить сервер Apache для применения новых настроек:
      sudo systemctl restart apache2

      или

      sudo service apache2 restart
  4. Проверка конфигурации:

    • После перезагрузки проверьте конфигурацию Apache, используя команду:
      apachectl -S

      Убедитесь, что все виртуальные хосты настроены правильно и у них указаны правильные DocumentRoot.

Заключение

Неправильный DocumentRoot в настройках Apache2 может вызывать перенаправления на неверные директории. Правильная настройка DocumentRoot для каждого виртуального хоста и проверка основной конфигурации — ключ к успешной работе вашего веб-сервера. Убедитесь, что все изменения тестируются после перезагрузки сервера, чтобы избежать возможных ошибок в конфигурации.

Оцените материал
Добавить комментарий

Капча загружается...