Вопрос или проблема
Я пытаюсь запретить базовому 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 перенаправлялись на этот подкаталог. Если у вас возникнут какие-либо дополнительные вопросы или проблемы, не стесняйтесь задавать их.