Есть ли способ передать заголовок 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-адрес:
- Используйте виртуальные хосты на основе портов. Браузер телефона может указать порты в 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
- Используйте виртуальные хосты на основе 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
- По-видимому, есть способ настроить индексный файл для перенаправления запроса с голым IP-адресом на правильный виртуальный хост. Я не исследовал это, потому что у меня уже работают решения 1 и 2 выше, но это косвенный способ получить host:value в заголовке. Вы можете прочитать об этом в документации Apache в разделе «Использование директивы ServerPath»: