当有多个与同一IP地址关联的网站(主机名)时,Web服务器如何识别要提供的URL?
答案 0 :(得分:1)
通过使用虚拟主机。
这是nginx
的配置示例http {
index index.html;
server {
server_name www.domain1.com;
access_log logs/domain1.access.log main;
root /var/www/domain1.com/htdocs;
}
server {
server_name www.domain2.com;
access_log logs/domain2.access.log main;
root /var/www/domain2.com/htdocs;
}
}
基本上,当用户请求资源时,服务器会检查请求的host field并做出相应的响应。
答案 1 :(得分:1)
使用Apache Web服务器,定义了一组虚拟主机,其中包含用于将请求与目录匹配的参数。使用Ubuntu Web服务器的基本默认设置,您将在/ etc / apache2 / sites-enabled目录中有一个文件,如下所示:
<VirtualHost>
ServerName example.com
DocumentRoot /var/www/example.com/httpdocs
</VirtualHost>
这告诉apache所有到达此计算机的example.com请求都应该路由到/var/www/example.com/httpdocs文件夹。 example.org的另一个条目可以将其指向另一个文件夹。
同样相关的是/ etc / hosts文件和apache a2ensite命令。
答案 2 :(得分:1)
这是通过使用NameVirtualHost
在apache中完成的首先声明httpd.conf中的IP和端口使用如下:
NameVirtualHost 127.0.0.1:80
然后在虚拟主机块中执行:
<VirtualHost 127.0.0.1:80>
ServerName your_domain
DocumentRoot path_to_your_app
....
</VirtualHost>
这将允许您在一个IP上拥有多个主机。但请注意,如果您直接访问IP,它会将请求定向到第一个虚拟主机。
答案 3 :(得分:1)
HTTP 1.1定义了一个名为“Host”标头的标头。
在Apache或任何其他服务器看到请求之前,客户端浏览器会创建http 1.1请求标头并将请求发送到您要求浏览器联系的服务器。
请求命中apache后,服务器会查看HTTP请求标头的Host标头部分。您可以使用wireshark,liveHttpHeaders,HTTPfox或任何您喜欢的http解析/数据包捕获工具来观察这一点。 HTTP 1.1中的主机头(主机:头没有为HTTP 1.0或0.9定义)的格式如下:
主持人:www.example.com \ r \ n
当apache查看此标头时,它会解析它并遍历现有的VirtualHosts表,该表用于将匹配的主机标头映射到定义的目录或操作。
也就是说,如果你有一个www.example.com的NameVirtualHost指向/some/path/example.com/
NameVirtualhost stuff here
<VirtualHost 127.0.0.1:80>
ServerName www.example.com
DocumentRoot /some/path/example.com
....
</VirtualHost>
你的apache会接受以下请求:
GET /index.html HTTP/1.1\r\n <-- version is a key part
Connection: close\r\n
Host: www.example.com\r\n <-- key part
Accept: blah\r\n
Another: blah\r\n
阅读维基页面了解有关标题格式的更多信息。
Apache会看到主机头包含www.example.com并提供该文件 /some/path/example.com/index.html因为该目录和文件名与请求的资源匹配,而且它是用于为包含www.example.com的主机头提供请求的目录。
这就是它的工作原理。
答案 4 :(得分:0)
取决于服务器的类型。 Apache使用.htaccess文件,您也可以配置虚拟主机。如果您正在尝试执行某些特定操作,则可能需要编辑您的问题,以准确包含您要查找的内容以及您要用来托管的软件。