Есть ли способ передать заголовок host: value в URL для виртуальных хостов Apache?

У меня есть два виртуальных веб-сайта на моем компьютере с Ubuntu 20.04 за пределами обычного корня документа Apache2. Я могу получить к ним доступ в своем браузере на том же компьютере.

Я также пытаюсь получить доступ к этим веб-сайтам виртуальных хостов через интрасеть со своего телефона, но не могу.

В настоящее время у меня нет способа безопасно отредактировать файл hosts моего телефона, что, я думаю, было бы реальным решением этой проблемы.

Есть ли способ передать заголовок host:value в URL-адресе в браузере моего телефона?

Я думаю что-то вроде: http://host:websiteA@192.168.0.10

Прямо сейчас все, что я могу получить в своем телефонном браузере, это корень документа Apache, когда я ввожу: http://192.168.0.10.

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

      000-default.conf file:
<VirtualHost *:80>
    ServerName localhost
    DocumentRoot /var/www/html
</VirtualHost>

<VirtualHost *:80>
    ServerName websiteA
    DocumentRoot "/home/user/websiteA"
    <Directory /home/user/websiteA>
        Require all granted
    </Directory>
</VirtualHost>

<VirtualHost *:80>
    ServerName websiteB
    DocumentRoot "/home/user/websiteB"
    <Directory /home/user/websiteB>
        Require all granted
    </Directory>
</VirtualHost>

hosts file:
127.0.0.1 websiteA
127.0.0.1 websiteB

Если нет способа включить заголовок в URL-адрес, то я полагаю, что могу поместить индексную страницу в корневую папку моего документа Apache, которая может выполнять вызов ajax с заголовком host:websiteA или host:websiteB, включенным в 192.168.0.10. Я мог бы сделать это за то время, которое потребовалось для написания этого вопроса, но было бы неплохо узнать, можно ли как-то удобно вставлять заголовки в URL-адреса.

Благодарю вас!

1 ответ

Я еще не нашел способа передать заголовок (хост: значение) в URL-адресе, но вот несколько альтернативных решений для доступа к виртуальным хостам apache на сервере apache через интрасеть из телефонного браузера, который может получить доступ к серверу только с помощью IP-адрес:

  1. Используйте виртуальные хосты на основе портов. Браузер телефона может указать порты в URL-адресе:http://192.168.0.10:80, http://192.168.0.10:81, http://192.168.0.10:82 для доступа к 3 различным виртуальным хостам.
      <VirtualHost *:80>...
<VirtualHost *:81>...
<VirtualHost *:82>...

В файле ports.conf:

      Listen 80
Listen 81
Listen 82
  1. Используйте виртуальные хосты на основе IP. Если DHCP-сервер интрасети не будет выделять несколько IP-адресов для сервера Apache, создайте псевдонимы IP-адресов на сервере Apache:

Используя терминал, где ifconfig показывает, что компьютер apache является enp8s0 192.168.0.110, выполните следующие команды (я только что выбрал следующие 2 IP-адреса, но сначала убедился, что они не используются во внутренней сети):

      sudo ifconfig enp8s0:0 192.168.0.111
sudo ifconfig enp8s0:1 192.168.0.112

Затем определите каждый виртуальный хост по IP-адресу в файле(ах) конфигурации виртуального хоста. Первый — это исходный виртуальный хост по умолчанию.

      <VirtualHost *:80>...
<VirtualHost 192.168.0.111:80>...
<VirtualHost 192.168.0.112:80>...

Эти IP-адреса не являются постоянными. Их можно сделать постоянными. Хорошая статья о временном и постоянном создании дополнительных IP-адресов для сервера находится ниже. В статье также обсуждаются более новые подходы, чем использование ifconfig для управления сетью:

https://www.2daygeek.com/add-additional-ip-secondary-ip-ubuntu-debian/

Обязательно задайте в файле /etc/hosts новые IP-адреса виртуальных хостов, чтобы вы могли запрашивать их по имени в браузере на сервере Apache:

      192.168.0.111   websiteA
192.168.0.112   websiteB
  1. По-видимому, есть способ настроить индексный файл для перенаправления запроса с голым IP-адресом на правильный виртуальный хост. Я не исследовал это, потому что у меня уже работают решения 1 и 2 выше, но это косвенный способ получить host:value в заголовке. Вы можете прочитать об этом в документации Apache в разделе «Использование директивы ServerPath»:

https://httpd.apache.org/docs/2.4/vhosts/examples.html

Другие вопросы по тегам