Требование подкаталога для доступа к веб-сервису с использованием apache2 и динамического DNS

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

Я пытаюсь запретить базовому http серверу на порту 80 находиться в корневом каталоге моего динамического DNS, и вместо этого использовать подсистему.

Таким образом, вместо
blabla.dynamicdns.org
он не будет обслуживаться,
но по адресу
blabla.dynamicdns.org/service он будет.

Эта попытка конфигурации не сработала. Говорит, что корневая директория не разрешена в тегах Directory.
Но я знаю, как сильно SE любит свои примеры, я все равно оставлю здесь эту довольно стандартную конфигурацию.

Я буквально ничего не знаю и мне нужно, чтобы меня буквально кормили с ложечки, и это сложно гуглить.

<VirtualHost *:80>
    # Директива ServerName устанавливает схему запроса, имя хоста и порт, которые
    # сервер использует для своей идентификации. Это используется при создании
    # URL-адресов перенаправления. В контексте виртуальных хостов, ServerName
    # указывает, какое имя хоста должно появляться в заголовке Host: запроса, чтобы
    # соответствовать этому виртуальному хосту. Для виртуального хоста по умолчанию (этого файла)
    # это значение не является решающим, так как оно используется как резервный хост.
    # Тем не менее, вы должны установить это значение для любого другого виртуального хоста явно.
    #ServerName www.example.com

    ServerAdmin webmaster@localhost


    # Доступные уровни журналирования: trace8, ..., trace1, debug, info, notice, warn,
    # error, crit, alert, emerg.
    # Также возможно настроить уровень журналирования для отдельных
    # модулей, например:
    #LogLevel info ssl:warn
    <Directory /var/www/html/ampache/>
    DocumentRoot /var/www/html/ampache
    DocumentRoot /var/www/html/ampache/public
    </Directory>

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

    # Для большинства конфигурационных файлов из conf-available/, которые
    # включены или отключены на глобальном уровне, возможно
    # включить строку только для одного конкретного виртуального хоста. Например, следующая строка
    # включает конфигурацию CGI только для этого хоста,
    # после того, как она была глобально отключена с помощью "a2disconf".
    #Include conf-available/serve-cgi-bin.conf
</VirtualHost>

Более корректная конфигурация, которая все равно не дает желаемого результата:

<VirtualHost *:80>
    # Директива ServerName устанавливает схему запроса, имя хоста и порт, которые
    # сервер использует для своей идентификации. Это используется при создании
    # URL-адресов перенаправления. В контексте виртуальных хостов, ServerName
    # указывает, какое имя хоста должно появляться в заголовке Host: запроса, чтобы
    # соответствовать этому виртуальному хосту. Для виртуального хоста по умолчанию (этого файла)
    # это значение не является решающим, так как оно используется как резервный хост.
    # Тем не менее, вы должны установить это значение для любого другого виртуального хоста явно.
    #ServerName www.example.com

    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html/ampache
    DocumentRoot /var/www/html/ampache/public

    # Доступные уровни журналирования: trace8, ..., trace1, debug, info, notice, warn,
    # error, crit, alert, emerg.
    # Также возможно настроить уровень журналирования для отдельных
    # модулей, например:
    #LogLevel info ssl:warn

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

    # Для большинства конфигурационных файлов из conf-available/, которые
    # включены или отключены на глобальном уровне, возможно
    # включить строку только для одного конкретного виртуального хоста. Например, следующая строка
    # включает конфигурацию CGI только для этого хоста,
    # после того, как она была глобально отключена с помощью "a2disconf".
    #Include conf-available/serve-cgi-bin.conf
</VirtualHost>

Извините за этот фактический спам, но моя история с SE и жажда “рабочих примеров” по темам, о которых я не знаю даже, как они работают, заставила меня это сделать.

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

Для настройки Apache2 таким образом, чтобы он обслуживал веб-сервис только по подкаталогу (например, blabla.dynamicdns.org/service), вам необходимо правильно настроить конфигурацию виртуального хоста. Вот пошаговое решение, которое должно помочь.

Шаг 1: Настройка конфигурации виртуального хоста

Откройте конфигурационный файл вашего виртуального хоста. Обычно он находится по пути /etc/apache2/sites-available/000-default.conf или может иметь другое имя в зависимости от вашей конфигурации. Добавьте или измените следующий код:

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    ServerName blabla.dynamicdns.org

    # Указываем корневую директорию веб-сайта
    DocumentRoot /var/www/html/ampache

    # Настройка для работы с подкаталогом
    <Directory /var/www/html/ampache/public>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

    # Логи
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Шаг 2: Редирект корневого URL

Если вы хотите, чтобы обращения к blabla.dynamicdns.org перенаправлялись на blabla.dynamicdns.org/service, вы можете добавить правила редиректа в конфигурацию:

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    ServerName blabla.dynamicdns.org

    DocumentRoot /var/www/html/ampache

    # Редирект корня на подкаталог
    RewriteEngine On
    RewriteCond %{REQUEST_URI} ^/$
    RewriteRule ^(.*)$ /service [R=301,L]

    <Directory /var/www/html/ampache/public>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

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

Шаг 3: Включение модуля mod_rewrite

Для работы с правилами редиректа необходимо убедиться, что модуль mod_rewrite включен в Apache. Вы можете включить его с помощью следующей команды:

sudo a2enmod rewrite

После включения модуля перезапустите Apache, чтобы изменения вступили в силу:

sudo systemctl restart apache2

Шаг 4: Проверка конфигурации

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

sudo apache2ctl configtest

Если конфигурация корректна, вы должны увидеть сообщение Syntax OK.

Шаг 5: Проверка доступа

Теперь, когда ваша конфигурация установлена, вы можете открыть браузер и проверить, что:

  • Обращение по адресу http://blabla.dynamicdns.org/ перенаправляет вас на http://blabla.dynamicdns.org/service.
  • Прямой доступ к http://blabla.dynamicdns.org/service также работает и обслуживает ваш веб-сервис.

Заключение

Теперь вы настроили Apache таким образом, чтобы он обслуживал ваш веб-сервис только по подкаталогу service, а все обращения к корневому URL перенаправлялись на этот подкаталог. Если у вас возникнут какие-либо дополнительные вопросы или проблемы, не стесняйтесь задавать их.

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

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