У меня есть установка DirectAdmin с Apache на сервере, который находится за NAT.
Все работает правильно при доступе к VirtualHost извне компьютера (либо через Интернет, либо через интранет), но у меня возникают проблемы при доступе к тому же VirtualHost с локального хоста (т.е. при использовании curl mywebsite.com внутри сервера).
Соответствующие сетевые устройства:
eth0 : IP Address inside the NAT
eth0:0 : IP Address outside the NAT (i.e. public IP Address)
eth1 : LAN IP Address
lo : Loopback
Ниже представлена соответствующая конфигурация httpd:
Listen 80
NameVirtualHost *:80
DocumentRoot "/var/www/html"
<VirtualHost *:80>
ServerName mydomain.com
...
</VirtualHost>
При использовании подстановочного знака NameVirtualHost
можно было бы ожидать запроса с Host: mydomain.com
директива, установленная в заголовке запроса (который curl
делает) для обслуживания VirtualHost
директива. Хотя, когда я curl mydomain.com
изнутри сервера, откат Apache к DocumentRoot
не позволяя мне получить доступ к VirualHost
хост.
Единственный способ заставить его работать - это отредактировать /etc/hosts
и определите IP внутри NAT для mydomain.com
.
Еще одна полезная информация:
Я побежал <?php print_r($_SERVER); ?>
на тестовой странице как внутри, так и вне сервера, чтобы проверить значения для SERVER_IP
и когда я curl
с удаленной машины я получаю IP-адрес внутри NAT, но когда я curl
изнутри сервера я получаю общедоступный IP-адрес.
Домен преобразуется в один и тот же IP-адрес на обоих концах (внутри и вне сервера).
Наилучшие пожелания.
Ты можешь использовать http://xip.io чтобы определить временный домен для вашего виртуального хоста, используя IP-адрес вашего компьютера.
Просто и легко;)