请求中的主机头被忽略了吗?

请求中的主机头被忽略了吗?

我阅读了 apache 文档,但有很多内容与 Debian [lenny,5.0.6] 不同。

Apache 忽略浏览器给出的主机头: http://x或者http://x:81或者http://x.mbg.local根据我的定义,所有服务都可用,但应该被阻止。x 的定义源自我的 hosts 文件 [每个人都可以这样做]。我是 ​​Apache 的新手,但在我的 IIS 上,它按预期工作。所有浏览器的行为都相同 [因此没有浏览器标头问题]。

我配置了两个VirtualHosts,摘录如下:

名称VirtualHost hugo:80

DocumentRoot /usr/share/doc 别名 /doc/ /usr/share/doc/ 选项索引 MultiViews FollowSymLinks 允许来自 192.168.24.0/24

另一个 VirtualHost 配置为端口 81。

然后我转到任意一台机器上的 hosts 文件,在新名称 x 下添加 hugo 的 ip 地址。然后,x 就可以提供服务了,尽管 apache 中的主机头是 hugo!!每个来自互联网的用户都可以这样做!

我现在没有希望了。有人能帮助我吗?

确实會非常好!

更新

现在,我刚刚从 httpd.conf 中删除了所有内容,并创建了两个启用的站点以使事情变得简单:

首先,对于 nagios [应该只在精确的情况下服务于此:

http://雷神:81

NameVirtualHost thor:81

<VirtualHost thor:81>

ServerName thor:81

ServerAlias thor:81
ServerPath /usr/share/nagios3
DocumentRoot /usr/share/nagios3
</VirtualHost>

但它回答

http://thor.mbg.local:81
甚至
http://x:81
还!

然后,测试服务器:

名称虚拟主机 thor.mbg.local:80

    
    服务器名称 thor.mbg.local
    服务器别名 thor.mbg.local
    文件根目录 /var/www/default
    
    订单允许、拒绝
        允许所有
    
    

这也是答案

http:雷神/
以及
http://thor.mbg.local/
apache 接受此完整配置。我找不到可以覆盖该配置的默认配置。

是否有其他 http 服务器软件可以解决这个问题?(我来自 IIS,它可以工作。)

现在:明白了!

感谢大家的帮助!我没有意识到,所有属性(如名称/IP 和端口)都必须在任何地方匹配。就我而言,发生了回退到默认主机的情况!!!

我从头开始使用“play-debian”启动虚拟机并解决了这个问题。如果有人想看最终定义,这里是:

在 debians port.conf 中,我现在有:

NameVirtualHost 192.168.26.92:80

b)在httpd.conf中:

<VirtualHost 192.168.26.92:80>

DocumentRoot /var/www/block

<Directory /var/www/block>
    Options Indexes FollowSymLinks MultiViews
    AllowOverride None
    Order Allow,Deny
    Allow from All ##would just like to see, this is the end!!!
</Directory>

</VirtualHost>

<VirtualHost 192.168.26.92:80>

    ServerName wl1
    ServerAlias wl1
    DocumentRoot /var/www/test80

    <Directory /var/www/test80>
    Options Indexes FollowSymLinks MultiViews
    AllowOverride None
    Order Allow,Deny
    Allow from All
    </Directory>

    LogLevel debug
    ErrorLog /var/log/apache2/test80-error.log
    CustomLog /var/log/apache2/test80-access.log vhost_combined

</VirtualHost>

<VirtualHost 192.168.26.92:80>

    ServerName wl2
    ServerAlias wl2
    DocumentRoot /var/www/test81

    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>
    <Directory /var/www/test81>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        Order allow,deny
        Allow from all
    </Directory>

    LogLevel info
    ErrorLog /var/log/apache2/error-test81.log
    CustomLog /var/log/apache2/test81-access.log vhost_combined

</VirtualHost>

对于 Debian 初学者来说,我觉得配置文件太多是不好的,你会失去概览。

非常感谢大家的帮助!

br++马布拉

答案1

在许多配置中,可用的虚拟服务器定义之一(通常是文件中的第一个)将充当默认设置。当请求标头与其中一个虚拟主机不匹配时,Apache 将提供默认设置。

如果这不能回答您的问题,请提供更完整的配置示例、请求 URL、提供的内容以及您希望提供的内容。


编辑

据我回忆,使用你的配置,当 apache 收到带有 HTTP 标头 Host:x 的请求时,它会发现没有定义它应该做什么。它毫不犹豫地想,我会从第一个能找到的网站提供一些东西,哦,看,有一个 Thor 网站 - 我就从那里提供一些东西吧!

http://httpd.apache.org/docs/2.0/vhosts/details.html

此列表中的第一个 vhost(配置文件中具有指定 IP 地址的第一个 vhost)具有最高优先级,并捕获对未知服务器名称的任何请求或没有 Host: 标头字段的请求。

如果这让您感到困扰,请为unknown.server.name设置一个虚拟主机,将其指向一个空目录,并设置一个自定义404,表示“有人已将主机名指向我们的服务器IP地址,但未与我们安排为该主机名提供网站服务 - 抱歉!”

答案2

您不需要使用不同的端口。我认为这就是您感到困惑的原因。

基于名称的虚拟主机(我认为您想要做的)的最新文档非常好:

http://httpd.apache.org/docs/current/vhosts/name-based.html

相关内容