Базовая конфигурация vhost Apache2 не работает

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

У меня маленькая проблема с конфигурацией виртуального хоста на Apache2.

Контекст: у меня есть Raspberry Pi с установленным Apache2. Я хочу получить доступ к своей тестовой директории по пути: “/var/www/html/test”.

Поэтому я изменил файл 000-default.conf в “/etc/apache2/sites-available” следующим образом, и это сработало:

 <VirtualHost *:80>

            ServerAdmin webmaster@localhost
            DocumentRoot /var/www/html

            ErrorLog ${APACHE_LOG_DIR}/error.log
            CustomLog ${APACHE_LOG_DIR}/access.log combined

    </VirtualHost>


    NameVirtualHost 192.168.1.29:80

    <VirtualHost 192.168.1.29:80>
    ServerName raspyvan
    DocumentRoot /var/www/html/test
    </VirtualHost>



    # vim: syntax=apache ts=4 sw=4 sts=4 sr noet

(raspyvan – это имя моего сервера на маршрутизаторе и в файле hosts)

Но я хотел бы запретить доступ с IP-адреса “192.168.1.29”.

Поэтому я во второй раз изменил файл 000-default.conf следующим образом:

Listen 192.168.1.29:80

ServerName DefaultServer
DocumentRoot /var/www/html

NameVirtualHost 192.168.1.29:80


<VirtualHost 192.168.1.29:80>
        ServerName 192.168.1.29

        <Directory />
                Deny from all
        </Directory>
</VirtualHost>


<VirtualHost 192.168.1.29:80>
                ServerName raspyvan
                DocumentRoot /var/www/test
</VirtualHost>



# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

Теперь проблема в том, что доступ по IP и имени хоста запрещен, и я не знаю, почему.

Правка: мой сервер имен используется в настройках DNS маршрутизатора и файле hosts для Apache.

Когда Apache не может сопоставить виртуальный хост, он всегда будет использовать первый виртуальный хост, с которым столкнётся (поэтомуhistorически нам требовался один IP для каждого SSL сертификата, пока не появился SNI).

Добавьте лог для каждого виртуального хоста;

ErrorLog ${APACHE_LOG_DIR}/error-default.log
CustomLog ${APACHE_LOG_DIR}/access-default.log combined

и

ErrorLog ${APACHE_LOG_DIR}/error-raspyvan.log
CustomLog ${APACHE_LOG_DIR}/access-raspyvan.log combined

Проверьте файл лога “access-default.log”, чтобы узнать, какой хост запрашивался.

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

Для решения проблемы с конфигурацией виртуальных хостов в Apache2 на вашем Raspberry Pi, давайте проанализируем вашу настройку и предложим несколько рекомендаций.

Контекст

Вы хотите настроить виртуальные хосты на Apache для доступа к каталогу /var/www/html/test, а также ограничить доступ к вашему серверу по IP-адресу 192.168.1.29. После внесения изменений, указанных в вашем вопросе, доступ к серверу как по IP-адресу, так и по имени хоста ("raspyvan") стал заблокирован.

Анализ конфигурации

  1. Первая конфигурация:

    <VirtualHost *:80>
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
    </VirtualHost>
    
    NameVirtualHost 192.168.1.29:80
    
    <VirtualHost 192.168.1.29:80>
        ServerName raspyvan
        DocumentRoot /var/www/html/test
    </VirtualHost>
  2. Вторая конфигурация:

    Listen 192.168.1.29:80
    ServerName DefaultServer
    DocumentRoot /var/www/html
    
    NameVirtualHost 192.168.1.29:80
    
    <VirtualHost 192.168.1.29:80>
        ServerName 192.168.1.29
        <Directory />
            Deny from all
        </Directory>
    </VirtualHost>
    
    <VirtualHost 192.168.1.29:80>
        ServerName raspyvan
        DocumentRoot /var/www/test
    </VirtualHost>

Проблемы и решения

  1. Неправильная директива Deny: В конфигурации второго виртуального хоста вы добавили директиву <Directory />, которая запрещает доступ ко всем каталогам. Это, скорее всего, приводит к блокировке доступа. Замените это на:

    <Directory /var/www/html/test>
        Allow from all
    </Directory>
  2. Расположение и порядок виртуальных хостов: Убедитесь, что ваши виртуальные хосты правильно расположены и проверяются в правильном порядке. Apache обрабатывает конфигурации сверху вниз; поэтому, если в качестве первого вхождения возникает хост с директивой Deny, это может затруднить доступ к другим.

  3. Логирование для отладки: Добавление отдельных логов для каждого виртуального хоста поможет вам лучше понять, что происходит. Как вы уже предложили, вы можете добавить следующее в вашу конфигурацию:

    <VirtualHost 192.168.1.29:80>
        ServerName raspyvan
        DocumentRoot /var/www/test
        ErrorLog ${APACHE_LOG_DIR}/error-raspyvan.log
        CustomLog ${APACHE_LOG_DIR}/access-raspyvan.log combined
    </VirtualHost>
    
    <VirtualHost 192.168.1.29:80>
        ServerName 192.168.1.29
        <Directory />
            Deny from all
        </Directory>
        ErrorLog ${APACHE_LOG_DIR}/error-default.log
        CustomLog ${APACHE_LOG_DIR}/access-default.log combined
    </VirtualHost>
  4. Перезапуск Apache: После внесения изменений в конфигурацию обязательно перезапустите веб-сервер, чтобы они вступили в силу:

    sudo systemctl restart apache2
  5. Проверка на конфликты в DNS: Убедитесь, что ваш роутер правильно настроен для разрешения имени "raspyvan" на IP-адрес 192.168.1.29. Проверьте файл hosts на сервере (обычно /etc/hosts), чтобы убедиться, что он правильно настроен.

Заключение

Следуя вышеперечисленным рекомендациям, вы сможете устранить проблемы с доступом к вашим виртуальным хостам. Обязательно тщательно следите за логами, это поможет вам своевременно отлавливать любые возникающие ошибки. Удачи в ваших начинаниях с Apache2 на Raspberry Pi!

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

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