局域网上可访问不同端口上的 WAMP 不同站点

局域网上可访问不同端口上的 WAMP 不同站点

我在 LAN 上设置了一个小型 Windows 服务器,其静态 IP 地址为 192.168.1.100。我还有一些其他客户端计算机,例如 192.168.1.101 - 104。

要求:

  • 在主服务器上托管一个 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端口
  • 我在客户端计算机的 hosts 文件中添加了“site1”以指向 192.168.1.100
  • 我在服务器上添加了别名

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

    选项索引FollowSymLinksMultiViews允许覆盖所有订单允许,拒绝允许所有

现在的问题是,这种行为并不完全是我所需要的。

服务器上的当前行为:

  • 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

客户端机器上的当前行为:

  • site1:8081(或 192.168.1.100:8081)c:/wamp/www在服务器上为我提供服务,而不是c:/site1我期望的。我不希望客户端可以访问 c:/wamp/www。
  • 相反, (或 192.168.1.100:8081/site1)在服务器上site1:8081/site1为我提供服务。c:/site1

我究竟做错了什么?

答案1

也许关于基于名称的虚拟主机如何工作的解释在这里是有帮助的。

当浏览器发送 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:头将包含 IP 地址,而不是主机名称。您需要使用名称(并且它们需要正确解析为正确的 IP)。

如果 Apache 找不到与 IP:Port:Host 组合匹配的虚拟主机,它将默认使用第一个 VirtualHost 部分。这就是这里发生的情况。只需交换两个部分,看看会发生什么...

您需要停止的做法是,通过混合基于命名的虚拟主机和基于端口的虚拟主机来混淆 Apache。换句话说,您需要删除NameVirtualHost指令.你不需要它们。

最后说明一下:如果目的是阻止 wamp 目录上的除服务器本身之外的所有人,那么您还需要在配置中更改其他内容:

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

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

答案2

我认为问题出在您基于名称的虚拟主机上。您已通过 ServerName 指令告知其主机名为“site1”,而实际上它们都是 localhost。不要使用基于名称的虚拟主机,只需允许它从端口中进行选择即可。

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

相关内容