I have a DirectAdmin setup with Apache on a server which is behind NAT.
Everything is working correctly when accessing a VirtualHost from outside the machine (either through the Internet and the Intranet) but I'm having problems when accessing the very same VirtualHost from the localhost (i.e. by using curl mywebsite.com inside the server).
Relevant network devices:
eth0 : IP Address inside the NAT
eth0:0 : IP Address outside the NAT (i.e. public IP Address)
eth1 : LAN IP Address
lo : Loopback
Below is the relevant httpd configuration:
Listen 80
NameVirtualHost *:80
DocumentRoot "/var/www/html"
<VirtualHost *:80>
ServerName mydomain.com
...
</VirtualHost>
When using a wildcarded NameVirtualHost
one would expect a request with the Host: mydomain.com
directive set in the request header (which curl
does) to be served by the VirtualHost
directive. Although, when I curl mydomain.com
from inside the server, Apache fallback to the DocumentRoot
not allowing me to access the VirualHost
host.
The only way I got it to work was to edit /etc/hosts
and define the IP inside the NAT for mydomain.com
.
Another piece of information that may be useful:
I ran <?php print_r($_SERVER); ?>
on a test page both from inside and outside the server to check the values for SERVER_IP
and when I curl
from a remote machine I get the IP address inside the NAT, but when I curl
from inside the server I get the public IP address.
The domain resolves to the very same IP address on both ends (inside and outside the server).
Best Regards.