WAMP不同的网站在不同的端口访问局域网

我有一个小型的Windows服务器设置在一个局域网,静态IP地址192.168.1.100。 我还有其他一些客户端机器,比如说192.168.1.101-104。

要求:

  • 在主服务器上托pipe一个Apache服务器(wampserver),只能在局域网上访问。
  • 在端口8080上设置默认的wampserver工具(如phpmyadmin),只能从服务器端访问
  • 将端口8081用于特殊的内部站点,可通过LAN上的所有机器访问

我目前的设置如下:

httpd.conf中:

ServerRoot "c:/wamp/bin/apache/apache2.2.22" Listen 8080 Listen 8081 ServerAdmin admin@localhost ServerName localhost:8080 DocumentRoot "c:/wamp/www/" <Directory /> Options FollowSymLinks AllowOverride None Order deny,allow Deny from all </Directory> <Directory "c:/wamp/www"> Options Indexes FollowSymLinks AllowOverride all Order deny,allow Deny from all Allow from 192.168.1 </Directory> <Directory "c:/site1"> Options Indexes FollowSymLinks AllowOverride None Order deny,allow Deny from all Allow from 192.168.1 </Directory> <Directory "cgi-bin"> AllowOverride None Options None Order deny,allow Deny from all Allow from 192.168.1 </Directory> 

的httpd-vhosts.conf:

 Listen 8080 Listen 8081 NameVirtualHost *:8080 NameVirtualHost *:8081 <VirtualHost *:8080> ServerName localhost DocumentRoot c:/wamp/www </VirtualHost> <VirtualHost *:8081> ServerName site1 DocumentRoot c:/site1 </VirtualHost> 
  • 我在Windows服务器上打开了端口8081
  • 我在客户端主机文件上添加了“site1”指向192.168.1.100
  • 我在服务器上添加了一个别名

    别名/ site1 /“c:/ site1 /”

    选项索引FollowSymLinks MultiViews AllowOverride all允许,拒绝全部允许

现在的问题是,行为不是我所需要的。

服务器上的当前行为:

  • 192.168.1.100:8080按预期为我服务c:/wamp/www
  • 192.168.1.100:8081也服务于我c:/wamp/www而不是c:/site1 ,我期望
  • 相反, 192.168.1.100:8081/site1 c:/site1服务于我c:/site1

客户机上的当前行为:

  • site1:8081 (或192.168.1.100:8081)服务于我在服务器上的c:/wamp/www ,而不是我所期望的c:/site1 。 我不想从客户端访问c:/ wamp / www。
  • 而是, site1:8081/site1 (或192.168.1.100:8081 site1:8081/site1 )为我服务器上的c:/site1

我究竟做错了什么?

也许关于名字虚拟主机如何工作的解释是有帮助的。

当浏览器发送192.168.1.100:8081的请求时,它将连接到192.168.1.100。 端口8081,随后会发送一个http请求。 这看起来(简化)有点像这样:

 host: 192.168.1.100 GET / 

Apache现在需要找出它将从哪个虚拟主机服务的响应。 它通过查看IP:Port对来实现,如果IP:Port对存在一个NamevirtualHost语句,它也会查看host:头。 这里需要注意的重要一点是,如果您通过IP调用站点, host: header将包含IP地址,而不是主机的名称。 你需要使用名称(他们需要正确parsing到正确的IP)。

如果Apache找不到与IP:端口:主机组合相匹配的虚拟主机,则默认为第一个VirtualHost部分。 这就是这里发生的事情。 只要交换你的两个部分,看看会发生什么…

你需要停止在这里做混淆的Apache混合基于命名的虚拟主机和基于端口的虚拟主机。 换句话说, 您需要删除NameVirtualHost指令 。 你不需要他们。

最后一句话:如果目标是在wamp目录中阻止每个人,而不是服务器本身,那么你也需要在你的configuration上修改其他的东西:

 <Directory "c:/wamp/www"> Options Indexes FollowSymLinks AllowOverride all Order deny,allow Deny from all Allow from 192.168.1.100 </Directory> 

这样只有服务器才能看到这个目录…

我认为问题是你的名字为基础的虚拟主机。 你已经通过ServerName指令告诉它它的主机名是“site1”,而实际上它们都是本地主机。 不要使用基于名字的虚拟主机,只允许它从端口中select。

从httpd-vhosts.conf中删除所有NameVirtualHost和ServerName行。