Apache Virtual Host (Subdomain) access with differ

2019-03-08 17:29发布

问题:

I am currently trying to configure the Virtual Host (Subdomain) of my Apache HTTP Server so it can be accessed with another computer on my LAN. The current setup of Apache with PHP and MySQL works locally on the same physical machine.

So I have two Virtual Host setup (development and cms) running on a non-default port of 50080. The machine of the server have a IP of 10.0.0.10. From the same physical machine, I can access the two Virtual Host using:

development.localhost:50080
cms.localhost:50080

From a different physical machine, I can access the root of the server using:

10.0.0.10:50080

But I cannot or do not know how to access the Virtual Host from the different machine. I tried something like:

development.10.0.0.10:50080
cms.10.0.0.10:50080

But they do not seem to work.

Here's how my httpd-vhosts file looks like:

NameVirtualHost *:50080
<VirtualHost *:50080>
    DocumentRoot "C:/www/HTTP"
    ServerName localhost
</VirtualHost>

<VirtualHost *:50080>
    ServerAdmin administrator@development.localhost
    DocumentRoot "C:/www/HTTP/development"
    ServerName development.localhost
    ErrorLog "logs/development.localhost-error.log"
    CustomLog "logs/development.localhost-access.log" common
</VirtualHost>

I read some of the other post here and the Apache forum, but there's not exact case for this.

I was wondering how I can access the Virtual Host (Subdomain) from another machine and keep the same port if possible.

Thanks in advance

回答1:

Ok, I figured it out, here are the configuration if anyone else is looking for this:

==================================================================================

Machine A (Apache HTTP Server): httpd-vhost:

NameVirtualHost *:50080

<VirtualHost *:50080>
    DocumentRoot "C:/www/HTTP"
    ServerName localhost
    ServerAlias alias <!-- Added -->
</VirtualHost>

<VirtualHost *:50080>
    ServerAdmin administrator@development.localhost
    DocumentRoot "C:/www/HTTP/development"
    ServerName development.localhost
    ServerAlias development.phoenix <!-- Added -->
    ErrorLog "logs/development.localhost-error.log"
    CustomLog "logs/development.localhost-access.log" common
</VirtualHost>

hosts:

127.0.0.1 development.localhost

127.0.0.1 alias
127.0.0.1 development.alias

==================================================================================

Machine B (Guest Machine): hosts:

10.0.0.10 alias
10.0.0.10 development.alias

From the second machine, you should be able to access with "alias" and "development.alias"



回答2:

I suggest making the following change (add the ServerAlias lines):

NameVirtualHost *:50080
<VirtualHost *:50080>
    DocumentRoot "C:/www/HTTP"
    ServerName localhost
    ServerAlias cms.myserver.com
</VirtualHost>

<VirtualHost *:50080>
    ServerAdmin administrator@development.localhost
    DocumentRoot "C:/www/HTTP/development"
    ServerName development.localhost 
    ServerAlias development.myserver.com
    ErrorLog "logs/development.localhost-error.log"
    CustomLog "logs/development.localhost-access.log" common
</VirtualHost>

Restart Apache to ensure the changes take effect.

Then on your second computer you need to add a custom dns entry for these new domain names. If it is Windows, edit the file c:\windows\system32\drivers\etc\hosts. If it is Linux, edit /etc/hosts. Either way add:

10.0.0.10 development.myserver.com
10.0.0.10 cms.myserver.com

Now on your second computer you should be able to access the following URLs:

http://development.myserver.com:50080
http://cms.myserver.com:50080


回答3:

Unless I'm missing something, you'll need to either set up DNS entries, or add entries to the /etc/hosts file of each computer accessing the server.

localhost is an entry that exists in everyone's /etc/hosts file by default, always pointing to 127.0.0.1. Without adding a /etc/hosts entry, developer.localhost doesn't exist, and prefixing an ip address with a subdomain won't work at all.



回答4:

For Named Virtual Hosts you need to use a hostname or domainname to connect to you apache server. It does not work with ips.

You could insert an entry in your /etc/hosts on your second system.



回答5:

Using a SSH + Putty tunnel, and thus having a 127.0.0.1 on my server, I managed to access my subdomains by doing the following on my server side:

# nano /etc/hosts

127.0.0.1  localhost.localdomain localhost
127.0.0.1  sub1.domain.com sub2.domain.com sub3.domain.com sub4.domain.com

I did not change the host file of the remote computer, and it works like a charm