Apache2 Виртуальные хосты без DNS/FQDN

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

Я не могу ни за что заставить работать второй виртуальный хост :
Я хотел бы получить доступ к серверу из локальной сети (не только локально) по 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.

Проверка и устранение неполадок

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

    sudo a2ensite 001.conf
  2. Проверка синтаксиса: Команда apache2ctl -t должна вернуть Syntax OK, что указывает на правильность конфигурации.

  3. Перезапуск Apache: После внесения изменений в конфигурацию, необходимо перезапустить Apache:

    sudo systemctl restart apache2
  4. Тестирование: Теперь вы должны быть в состоянии получить доступ к сайту, открыв в браузере 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. Если возникнут дополнительные вопросы или проблемы, не стесняйтесь искать помощь в документации или у сообщества.

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

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