我有一个小型的Windows服务器设置在一个局域网,静态IP地址192.168.1.100。 我还有其他一些客户端机器,比如说192.168.1.101-104。
要求:
我目前的设置如下:
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>
我在服务器上添加了一个别名
别名/ 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行。