当您第一次开始学习域名,IP地址,Web服务器和网站是否适合并共同合作时,有时候会有点混乱或压倒一切。这一切如何顺利开展工作?今天
今天的问题
照片由Rosmarie Voegtli(Flickr)提供。
问题
SuperUser reader user3407319想知道网络服务器是否只拥有一个网站every1010mh1112
基于我对DNS的理解以及将域名与网站所存储的Web服务器的IP地址相关联,这是否意味着每个Web服务器只能容纳一个网站?如果网络服务器拥有多个网站,那么如何解决这些问题,以便我可以访问我想要的网站,而不会出现任何问题或混乱?
Do Web服务器每个只能持有一个网站,还是持有更多的?
答案
SuperUser贡献者Bob已经为us:
提供了答案基本上,浏览器包括HTTP请求中的域名,因此Web服务器知道请求了哪个域,并可以相应地进行响应。
HTTP Requests
您的典型HTTP请求是如何发生的?
1.用户提供一个URL,格式为http: // host:port / path。
2.浏览器提取URL的主机(域)部分,并在称为名称解析的过程中将其转换为IP地址(如有必要)。此翻译可以通过DNS进行,但不必(例如,常用操作系统上的本地主机文件绕过DNS)。
3.浏览器打开到指定端口的TCP连接,或默认为该IP地址上的端口80.
4.浏览器发送HTTP请求。对于HTTP / 1.1,看起来像这个:
主机头是标准的,需要在HTTP / 1中。1.HTTP / 1中没有指定。0规格,但有些服务器支持它。
从这里,Web服务器有几个信息可以用来决定响应应该是什么。请注意,单个Web服务器可能绑定到多个IP地址。
请求的IP地址,从TCP套接字(客户端的IP地址也可用,但这很少使用,有时用于阻塞/过滤)所请求的端口,从TCP套接字请求的主机名称,由HTTP请求中的浏览器在主机头中指定请求的路径任何其他标题(Cookie等))
你似乎已经注意到,这几天最常见的共享托管设置将多个网站放在一个单一的IP地址:port组合上,只是主机区分网站。
这被称为Apache-land中的基于名称的虚拟主机,而Nginx将其称为服务器块中的服务器名称,而IIS更喜欢虚拟服务器。
关于HTTPS?
HTTPS有点不同。一切都与建立TCP连接相同,但之后必须建立加密的TLS隧道。目标是不泄露有关请求的任何信息。
为了验证Web服务器实际拥有该域,Web服务器必须发送由受信任的第三方签名的证书。然后浏览器会将此证书与其请求的域进行比较。
这是一个问题。网络服务器如何知道哪个主机/网站显然,由于IPv4地址用尽,这已经成为问题。
输入SNI(服务器名称指示)。浏览器现在在TLS协商期间传递主机名,因此Web服务器具有足够早的信息来发送正确的证书。在Web服务器端,配置与HTTP虚拟主机的配置非常相似。
的缺点是主机名称现在在加密之前被传递为纯文本,并且基本上是泄漏的信息。这通常被认为是可接受的权衡,尽管考虑到主机名通常暴露在DNS查询中。
如果您只通过IP地址请求网站?
当Web服务器不知道您请求的特定主机取决于Web服务器时,Web服务器执行什么操作通常,有一个
默认网站可以是自己的独立网站(通常显示错误消息),或者可以是Web服务器上的任何其他网站,具体取决于Web服务器管理员的偏好。
有什么要补充说明吗?在评论中发出声音。想要阅读其他技术精湛的Stack Exchange用户的更多答案?在这里查看完整的讨论话题。
."