2011-08-21 138 views
8

我目前正在尝试配置我的Apache HTTP服务器的虚拟主机(子域),以便可以使用局域网上的另一台计算机访问它。 Apache和PHP和MySQL的当前设置在同一物理机器上本地工作。Apache虚拟主机(子域)访问局域网上的不同计算机

因此,我有两个虚拟主机设置(开发和cms)在非默认端口50080上运行。服务器的机器IP为10.0.0.10。从同一台物理机器,我可以通过访问这两个虚拟主机:

development.localhost:50080 
cms.localhost:50080 

从不同的物理机器,我可以通过访问服务器的根目录:

10.0.0.10:50080 

但我不能或做不知道如何从不同的机器访问虚拟主机。我试过类似的东西:

development.10.0.0.10:50080 
cms.10.0.0.10:50080 

但他们似乎没有工作。

这是我的httpd-vhosts文件看起来像:

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

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

我看了这里的一些其他职位和Apache论坛,但有不准确的情况下这一点。

我想知道如何从另一台机器访问虚拟主机(子域),并尽可能保持相同的端口。

在此先感谢

回答

25

好吧,我想通了,这里有其他人是否在寻找配置这个:

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

机器A(A帕什HTTP服务器): 的httpd的虚拟主机:

NameVirtualHost *:50080 

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

<VirtualHost *:50080> 
    ServerAdmin [email protected] 
    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> 

主机:

127.0.0.1 development.localhost 

127.0.0.1 alias 
127.0.0.1 development.alias 

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

机器B(客机): 主机:

10.0.0.10 alias 
10.0.0.10 development.alias 

从第二台机器,你应该能够“别名”和“development.alias”

+2

非常感谢,非常感谢!对于任何仍然遇到这种问题的人来说,有一些附注: 上面写着“phoenix”,我使用了别名并且工作正常(不知道为什么在其他地方别名时使用凤凰......) 也可能需要在您通过网络看到您的网站之前,在您使用的端口上为您的本地防火墙创建规则。我必须为端口80创建一个例外(我没有使用50080) –

+0

您还可以添加mod_proxy,然后添加ProxyPass/dev http://development.localhost/和ProxyReversePass/dev http:// development。localhost /,然后使用http:// public-ip/dev/ –

+0

是否可以在不编辑客户端主机文件的情况下执行此操作? –

2

除非我失去了一些东西,你要么需要设置DNS条目,或添加条目到/ etc每台计算机访问服务器的/ hosts文件。

localhost默认情况下存在于每个人的/ etc/hosts文件中,总是指向127.0.0.1。在不添加/ etc/hosts条目的情况下,developer.localhost不存在,并且用子域名前缀ip地址根本不起作用。

+0

我在Apache机器上的主机文件有条目: 127.0.0.1 development.localhost 第二台机器还没有什么,我应该添加什么? – YTKColumba

+0

这会工作,是的。 –

0

对于Named Virtual Hosts您需要使用主机名或域名连接到您的apache服务器。它不适用于ips。

您可以在第二个系统上的/etc/hosts中插入一个条目。

+0

我在Apache机器上的主机文件有条目: 127.0.0.1 development.localhost 第二台机器还没有什么,我应该添加什么?例如 – YTKColumba

+0

'<开发服务器的IP> development.server',然后将'ServerAlias development.server'添加到您的apache配置中。 –

3

我建议进行以下更改(添加ServerAlias线):

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

<VirtualHost *:50080> 
    ServerAdmin [email protected] 
    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> 

重启Apache以确保更改生效。

然后在您的第二台计算机上,您需要为这些新域名添加一个自定义DNS条目。如果是Windows,请编辑文件c:\windows\system32\drivers\etc\hosts。如果是Linux,请编辑/ etc/hosts。无论哪种方式,地址:

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

现在你的第二台计算机上,你应该能够访问以下网址:

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

我试图用配置启动Apache时出现错误... – YTKColumba

+0

我在尝试启动Apache时遇到错误,因此它似乎是使用httpd-vhosts文件进行的配置。 顺便说一句,第一个条目指向目录的根目录,我没有添加“cms”条目,因为我认为它与“开发”条目相同 – YTKColumba

+0

日志中的apache错误是什么? –

0

使用SSH +腻子隧道,因此具有127.0访问。 0.1我的服务器上,我设法通过执行以下操作上我的服务器端访问我的子域:

# 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 

我没有改变远程计算机的主机文件,它就像一个魅力