在accept()调用之后是否选择了虚拟主机根目录?

时间:2017-06-25 22:48:58

标签: c apache sockets

文件/etc/apache2/sites-available/000-default.conf

中同一IP上的两个虚拟主机的Apache2配置(如下)
# Ensure that Apache listens on port 80
Listen 80
<VirtualHost *:80>
    DocumentRoot "/www/example1"
    ServerName www.example.com

    # Other directives here
</VirtualHost>

<VirtualHost *:80>
    DocumentRoot "/www/example2"
    ServerName www.example.org

    # Other directives here
</VirtualHost>

二进制apache2将会收听,例如listen(listenFD, 5)

listenFD应该是这样的,

retval = bind(listenFD, (struct sockaddr *) &servaddr, sizeof(servaddr));  其中servaddr.sin_port = htons(80);

使用给定的accept()调用语法,

connfd = accept(listenFD, (struct sockaddr *) &cliaddr, &clilen);

问题:

httpd服务器是否决定在DocumentRoot呼叫后选择相应的虚拟主机accept()虚拟主机选择应用层逻辑吗?

1 个答案:

答案 0 :(得分:3)

在服务器解析Host: HTTP头字段之前,无法解析虚拟主机,这显然是在accept()之后以及在连接的套接字上读取了一些数据之后。