Вопрос или проблема
Мне удалось настроить несколько виртуальных сетевых интерфейсов (NIC) в одной виртуальной машине и связать веб-сайты с разными IP-адресами на одном сервере, например, получить доступ к двум веб-сайтам по:
http://10.188.2.150
http://10.188.2.152 <-- оба IP-адреса принадлежат одному серверу
Недостаток в том, что в VirtualBox одна виртуальная машина может иметь максимум 4 сетевых адаптера.
Теперь я пробую следующее: связать два веб-сайта с одним и тем же IP-адресом, но разными портами, чтобы я мог получить доступ к двум веб-сайтам следующим образом:
http://10.188.2.150:8003
http://10.188.2.150:8004
(Я проверил, что эти два порта не заняты с помощью ‘lsof -i :[порт]’)
Но я не могу получить доступ к веб-сайту, открыв, например: http://10.188.2.150:8003
Я настроил свой httpd.conf следующим образом:
Listen 10.188.2.150:8003
Listen 10.188.2.152:8004
<VirtualHost 10.188.2.150:8003>
ServerName 10.188.2.150:8002
ServerAdmin admin@localhost
DocumentRoot /var/www/html/panda-web/html
<Directory /var/www/html/panda-web/html>
AllowOverride All
</Directory>
RewriteEngine On
RewriteOptions Inherit
</VirtualHost>
<VirtualHost 10.188.2.150:8004>
ServerName 10.188.2.150:8004
ServerAdmin admin@localhost
DocumentRoot /var/www/html/sheep-web/html
<Directory /var/www/html/sheep-web/html>
AllowOverride All
</Directory>
RewriteEngine On
RewriteOptions Inherit
</VirtualHost>
Я посмотрел на сайт Apache, но, похоже, что я что-то пропустил? Кто-нибудь пробовал это?
Но я не могу получить доступ к веб-сайту, открыв
Это не очень содержательный анализ проблемы.
- Вы проверяли, открыт ли порт на веб-сервере и действительно ли он прослушивает соединения (например, используя netstat – кстати, вы забыли упомянуть, на какой ОС это работает)?
- Вы пробовали перехватывать пакеты, которые проходят туда и обратно (например, используя Wireshark)?
- Вы смотрели на журналы вашего сервера?
Вы можете иметь более одного IP-адреса на одном сетевом адаптере, если это ваша настоящая проблема.
Возвращаясь к вашему первоначальному вопросу по Apache, вы также должны сказать нам, какую версию Apache вы используете. Это, вероятно, не имеет значения для этого конкретного вопроса, но между версиями программного обеспечения могут быть незначительные или значительные различия…
Для общего введения я бы посмотрел на руководство по виртуальным хостам в документации Apache.
Вы можете позволить Apache прослушивать разные порты одного и того же IP-адреса: посмотрите директивы Listen и VirtualHost.
Вы также можете разместить два виртуальных хоста на одном и том же IP:порт, посмотрите на директивы NameVirtualHost и ServerName.
По крайней мере, в вашем примере вы неверно указали директивы ServerName
. Я подозреваю, что вы не читали или не понимали их документацию, прежде чем вносить изменения в файлы конфигурации.
Ответ или решение
Конечно! Давайте подробно рассмотрим вашу проблему и пути её решения.
Проблема
Вы хотите, чтобы два веб-сайта работали на одном IP-адресе, но на разных портах (например, http://10.188.2.150:8003
и http://10.188.2.150:8004
). Вы уже настроили конфигурацию Apache, но не можете получить доступ к сайтам на указанных портах.
Проверка конфигурации Apache
-
Проверьте, что Apache слушает на нужных портах:
Чтобы удостовериться, что Apache слушает на портах 8003 и 8004, выполните следующую команду:netstat -tuln | grep LISTEN
Убедитесь, что вы видите строки, похожие на:
tcp 0 0 10.188.2.150:8003 0.0.0.0:* LISTEN tcp 0 0 10.188.2.150:8004 0.0.0.0:* LISTEN
-
Содержимое конфигурационного файла:
Предполагается, что вы используете следующий конфигурационный файл, как вы указали:Listen 10.188.2.150:8003 Listen 10.188.2.150:8004 <VirtualHost 10.188.2.150:8003> ServerName 10.188.2.150:8003 ServerAdmin admin@localhost DocumentRoot /var/www/html/panda-web/html <Directory /var/www/html/panda-web/html> AllowOverride All </Directory> RewriteEngine On RewriteOptions Inherit </VirtualHost> <VirtualHost 10.188.2.150:8004> ServerName 10.188.2.150:8004 ServerAdmin admin@localhost DocumentRoot /var/www/html/sheep-web/html <Directory /var/www/html/sheep-web/html> AllowOverride All </Directory> RewriteEngine On RewriteOptions Inherit </VirtualHost>
Обратите внимание, что в директиве ServerName для первого виртуального хоста у вас была опечатка (вы указали 8002 вместо 8003).
-
Перезапуск Apache:
После внесения изменений в конфигурацию не забудьте перезапустить Apache для того, чтобы изменения вступили в силу:sudo systemctl restart apache2 # На Debian/Ubuntu sudo systemctl restart httpd # На CentOS/RedHat
-
Проверка журналов:
Если вы по-прежнему не можете получить доступ к сайтам, полезно проверить журналы Apache для получения ошибок. Журналы обычно находятся в:/var/log/apache2/error.log
на Debian/Ubuntu/var/log/httpd/error_log
на CentOS/RedHat
Проверка доступности
-
Файрволл: Убедитесь, что ваш файрволл (например,
iptables
илиfirewalld
) разрешает доступ к портам 8003 и 8004. Вы можете открыть порты с помощью команд:sudo iptables -A INPUT -p tcp --dport 8003 -j ACCEPT sudo iptables -A INPUT -p tcp --dport 8004 -j ACCEPT
-
Тестирование локально: Попробуйте открыть сайт из браузера на машинe, где запущен сервер. Если всё работает локально, но не работает с других машин в сети, проблема может быть связана с сетевыми настройками или конфигурацией файрволла.
-
Проверка с помощью cURL: Выполните команду на вашем сервере, чтобы протестировать доступность порта:
curl -I http://10.188.2.150:8003
Обратите внимание
- Версия Apache: Убедитесь, что вы используете поддерживаемую версию Apache, поскольку конфигурация может отличаться в некоторых версиях.
- Документация: Ознакомьтесь с документацией Apache по виртуальным хостам и директивам Listen и VirtualHost.
Если у вас останутся вопросы, пожалуйста, не стесняйтесь задавать!