Вопрос или проблема
Я не могу ни за что заставить работать второй виртуальный хост :
Я хотел бы получить доступ к серверу из локальной сети (не только локально) по IP, без DNS.
Окружение:
- Хост Raspberry Pi
- IP: 172.22.22.77
- Имя хоста: piBox
- Apache/2.4.62 (Debian) по умолчанию
Конфигурация файла hosts
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
127.0.1.1 piBox
port.conf
# Если вы просто измените порт или добавите больше портов здесь, вам, вероятно, также
# придется изменить оператор VirtualHost в
# /etc/apache2/sites-enabled/000-default.conf
Listen 80
Listen 8080
<IfModule ssl_module>
Listen 443
</IfModule>
<IfModule mod_gnutls.c>
Listen 443
</IfModule>
Виртуальный хост установлен по умолчанию
<VirtualHost *:80>
# Директива ServerName устанавливает схему запроса, имя хоста и порт, которые
# сервер использует для идентификации себя. Это используется при создании
# URL-адресов перенаправления. В контексте виртуальных хостов, ServerName
# указывает, какое имя хоста должно появляться в заголовке Host: запроса, чтобы
# соответствовать этому виртуальному хосту. Для виртуального хоста по умолчанию (этого файла)
# это значение не решающее, так как оно используется как последний ресурс, независимо от этого.
# Тем не менее, вы должны установить его для любого дальнейшего виртуального хоста явно.
#ServerName www.example.com
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
# Доступные уровни логирования: 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>
Я создал новый VirtualHost 001.conf
<VirtualHost 172.22.22.77:8080>
# Директива ServerName устанавливает схему запроса, имя хоста и порт, которые
# сервер использует для идентификации себя. Это используется при создании
# URL-адресов перенаправления. В контексте виртуальных хостов, ServerName
# указывает, какое имя хоста должно появляться в заголовке Host: запроса, чтобы
# соответствовать этому виртуальному хосту. Для виртуального хоста по умолчанию (этого файла)
# это значение не решающее, так как оно используется как последний ресурс, независимо от этого.
# Тем не менее, вы должны установить его для любого дальнейшего виртуального хоста явно.
ServerName 172.22.22.77
ServerAdmin webmaster@localhost
DocumentRoot /var/www/site2
# Доступные уровни логирования: 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>
Я пытался использовать именованный виртуальный хост, заменив ServerName 172.22.22.77
на ServerName piBox
и установив <VirtualHost *:8080>
. Я также убедился, что новая конфигурация VirtualHost была включена: sudo a2ensite 001.conf
$ apache2ctl -t
AH00558: apache2: Не удалось надежно определить полное доменное имя сервера, используется 127.0.1.1. Установите директиву 'ServerName' глобально, чтобы подавить это сообщение
Синтаксис Верный
$ apache2ctl -S
AH00558: apache2: Не удалось надежно определить полное доменное имя сервера, используется 127.0.1.1. Установите директиву 'ServerName' глобально, чтобы подавить это сообщение
Конфигурация виртуального хоста:
172.22.22.77:8080 172.22.22.77 (/etc/apache2/sites-enabled/001.conf:1)
*:80 127.0.1.1 (/etc/apache2/sites-enabled/000-default.conf:1)
ServerRoot: "/etc/apache2"
Main DocumentRoot: "/var/www/html"
Main ErrorLog: "/var/log/apache2/error.log"
Mutex rewrite-map: using_defaults
Mutex default: dir="/var/run/apache2/" mechanism=default
Mutex mpm-accept: using_defaults
Mutex watchdog-callback: using_defaults
PidFile: "/var/run/apache2/apache2.pid"
Define: DUMP_VHOSTS
Define: DUMP_RUN_CFG
User: name="www-data" id=33 not_used
Group: name="www-data" id=33 not_used
Ответ или решение
Для настройки виртуальных хостов Apache2 без использования DNS или полного доменного имени (FQDN), необходимо учесть несколько ключевых моментов, чтобы обеспечить корректный доступ к вашему серверу с использованием только его IP-адреса. Рассмотрим подробно процесс настройки, основываясь на предоставленной информации.
Окружение сервера
Вы работаете с системами:
- Устройство: Raspberry Pi
- IP-адрес: 172.22.22.77
- Имя хоста: piBox
- Версия Apache: 2.4.62 (Debian)
Файл hosts
Ваш файл /etc/hosts
настроен следующим образом:
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
127.0.1.1 piBox
Эта конфигурация позволяет локальному компьютеру разрешать имя piBox
в 127.0.1.1
. Это ограничивает использование этого имени только для локальной связи.
Конфигурация портов
В файле ports.conf
заданы следующие параметры:
Listen 80
Listen 8080
<IfModule ssl_module>
Listen 443
</IfModule>
<IfModule mod_gnutls.c>
Listen 443
</IfModule>
Основной виртуальный хост
Стандартная конфигурация для основного виртуального хоста выглядит так:
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Этот хост слушает на порту 80 и обслуживает контент из каталога /var/www/html
.
Новый виртуальный хост
Вы создаете новый файл конфигурации /etc/apache2/sites-available/001.conf
с содержимым:
<VirtualHost 172.22.22.77:8080>
ServerName 172.22.22.77
ServerAdmin webmaster@localhost
DocumentRoot /var/www/site2
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Эта конфигурация предполагает, что вы хотите, чтобы новый виртуальный хост был доступен по IP-адресу 172.22.22.77 на порту 8080 и обслуживал контент из /var/www/site2
.
Проверка и устранение неполадок
-
Активация виртуального хоста: Убедитесь, что данный файл конфигурации активирован с помощью команды:
sudo a2ensite 001.conf
-
Проверка синтаксиса: Команда
apache2ctl -t
должна вернутьSyntax OK
, что указывает на правильность конфигурации. -
Перезапуск Apache: После внесения изменений в конфигурацию, необходимо перезапустить Apache:
sudo systemctl restart apache2
-
Тестирование: Теперь вы должны быть в состоянии получить доступ к сайту, открыв в браузере
http://172.22.22.77:8080
.
Усунение ошибок
-
Если вы видите ошибку
Could not reliably determine the server's fully qualified domain name
, это предупреждение можно игнорировать при локальном использовании, но его можно устранить, добавив следующие строки в ваш файл конфигурации Apache, например вapache2.conf
:ServerName localhost
-
Убедитесь, что папка
/var/www/site2
существует и содержит файлы, которые вы хотите отображать.
Заключение
Настройка виртуальных хостов Apache без использования DNS и FQDN вполне осуществима. С правильной конфигурацией и должной проверкой логов можно эффективно использовать IP-адреса для обеспечения доступа к различным веб-тестам и приложениям на вашем Raspberry Pi. Если возникнут дополнительные вопросы или проблемы, не стесняйтесь искать помощь в документации или у сообщества.