• “基于名称”的虚拟主机支持


    这个文档描述了什么时候和怎么使用“基于名称”的虚拟主机

    一、“基于名称”和“基于IP”的虚拟主机

    基于IP的主机是根据连接IP地址来决定正确的虚拟主机来服务。因此你需要一个独立的IP地址来对应主机。

    对于基于名称的虚拟主机,服务器依赖于客户端在HTTP头中报告的主机名称。使用这种技术,不同的主机能够共享一个IP地址。

    基于名称的虚拟主机通常更简单,因为您只需要配置DNS服务器将每个主机名映射到正确的IP地址,然后配置Apache HTTP Server来识别不同的主机名。基于名称的虚拟主机也减轻了对稀缺IP地址的需求。 因此,您应该使用基于名称的虚拟主机,除非您使用明确要求基于IP的主机的设备。 基于客户端支持的基于IP的虚拟主机的历史原因不再适用于通用Web服务器。

    二、服务器如何选择正确的基于名称的虚拟主机

    重要的是要认识到基于名称的虚拟主机解析的第一步是基于IP的解决方案。 基于名称的虚拟主机解析仅在将候选者缩小到最佳基于IP的匹配后才选择最适合的基于名称的虚拟主机。 在所有虚拟主机指令中使用通配符(*)作为IP地址,这使得基于IP的映射无关。

    当请求到达时,服务器将根据请求使用的IP地址和端口找到最佳(最具体)匹配的<VirtualHost>参数。如果有多个虚拟主机包含最佳匹配地址和端口组合,Apache将进一步将ServerName和ServerAlias指令与请求中存在的服务器名进行比较。

    如果您从任何基于名称的虚拟主机中省略ServerName指令,则服务器将默认为从系统主机名派生的完全限定域名(FQDN)。这种隐含设置的服务器名称可能导致反直觉的虚拟主机匹配,并且不鼓励。

    IP和端口组合的默认基于名称的虚拟主机

    如果在包含最具体匹配的IP地址和端口组合的虚拟主机集中找不到匹配的ServerName或ServerAlias,则将使用与之匹配的第一个列出的虚拟主机。

    三、使用基于名称的虚拟主机

    第一步是为您的每一个不同的主机创建一个<VirtualHost>块。 在每个<VirtualHost>块中,您将至少需要一个ServerName指令来指定提供哪个主机,并使用DocumentRoot指令来显示文件系统中该主机的内容的何处。

    例如,假设您正在为www.example.com提供域名,并且希望添加虚拟主机other.example.com,该主机指向相同的IP地址。 然后,您只需将以下内容添加到httpd.conf: 

    <VirtualHost *:80>
        # This first-listed virtual host is also the default for *:80
        ServerName www.example.com
        ServerAlias example.com 
        DocumentRoot "/www/domain"
    </VirtualHost>
     
    <VirtualHost *:80>
        ServerName other.example.com
        DocumentRoot "/www/otherdomain"
    </VirtualHost>

    您也可以指定一个显式IP地址代替<VirtualHost>指令中的*。 例如,您可能需要这样做,以便在一个IP地址上运行一些基于名称的虚拟主机,以及在另一个IP地址上运行基于IP或另一组基于名称的虚拟主机。

    许多服务器希望通过多个名称访问。 这可以通过ServerAlias指令放在<VirtualHost>部分中。 例如,在上面的第一个<VirtualHost>块中,ServerAlias指令指示列出的名称是人们可以用来查看同一网站的其他名称:

    ServerAlias example.com *.example.com

    然后,请求example.com域中的所有主机将由www.example.com虚拟主机提供。 通配符*和? 可以用来匹配名字。 当然,您不能仅仅填写名称并将其放在ServerName或ServerAlias中。 您必须先将DNS服务器正确配置为将这些名称映射到与服务器关联的IP地址。

    最佳匹配的<virtualhost>集合的基于名称的虚拟主机按照配置中显示的顺序进行处理。 使用第一个匹配的ServerName或ServerAlias,通配符的优先级也不同(对于ServerName与ServerAlias也不同)。

    VirtualHost指令中完整的名称列表将被视为(非通配符)ServerAlias。

    最后,您可以通过在<VirtualHost>容器中放置其他指令来微调虚拟主机的配置。 大多数指令可以放在这些容器中,然后更改相关虚拟主机的配置。 要查看是否允许特定的指令,请检查指令的上下文。 在主服务器上下文(任何<VirtualHost>容器之外)中设置的配置指令只有在虚拟主机设置不被覆盖时才会被使用。

    如果用了WSGI,例如python apache django环境中,可以在virtualhost中包括:WSGIScriptAlias / "/var/www/html/example.com/django.wsgi"

    如果同时使用了SSL,就需要在ssl.conf中做相应的配置。

    ps:

    翻译:http://httpd.apache.org/docs/2.4/vhosts/name-based.html

    fine-tune:微调

  • 相关阅读:
    ImageView一例
    TextView之一:子类的常用属性
    TextView之二:常用属性
    Android中的消息机制:Handler消息传递机制
    关于LayoutParams
    LinearLayout的一些注意事项
    支付宝扫描二维码登录网站
    Cok
    Cok
    STM32的USART
  • 原文地址:https://www.cnblogs.com/ekse/p/6945182.html
Copyright © 2020-2023  润新知