我有一个Apache web服务器,它使用相同的域名,但使用不同的子域,托管了几个Django站点:
proj1.example.com
proj2.example.com
proj3.example.com上面每一个的apache配置文件都是这样开始的:
<VirtualHost *:80>
ServerName proj1.example.com假设服务器的外部IP是200.x.x.x,而它的内部IP是10.x.x.x,那么如果我想向服务器添加一个新的子域名(proj4.example.com),应该使用哪一个IP?我通常做的是web和基本的apache配置,我仍然不清楚接下来会发生什么。有人能给我一个彻底的解释什么需要设置和正在发生什么一旦我已经为一个新的网站设置了apache配置文件?
发布于 2010-02-24 21:50:29
要快速回答您的问题,您不需要担心配置的IP地址,域名/别名是您唯一需要担心的问题,因为apache将使用浏览器传递的HTTP_HOST头。
<VirtualHost *:80>
ServerName proj1.example.com
DocumentRoot /path/to/proj1
</VirtualHost>
<VirtualHost *:80>
ServerName proj2.example.com
DocumentRoot /path/to/proj2
</VirtualHost>
<VirtualHost *:80>
ServerName proj3.example.com
DocumentRoot /path/to/proj3
</VirtualHost>用拉蒙的话来说,这里有两个独立的东西在发生。
当浏览器被告知要拉出一个页面时,它做的第一件事就是为proj1.example.com做DNS查找。DNS请求首先到达根服务器,然后说“谁控制example.com",然后根服务器指向控制.com域的DNS服务器,然后对DNS服务器说”谁控制example.com",然后转到您的DNS服务器,然后说“proj1.example.com的IP地址是什么”。您的DNS服务器说,“哦,这是IP x.x”,这是外部IP地址。浏览器将向您的IP发送请求,这时,您的路由器将其转发到您的服务器(带有内部IP地址)。web服务器的IP地址不是HTTP请求/响应的一部分,因此不需要它。
请求内容
您的浏览器现在知道该iP地址,并向您的IP发送请求。请求的内容如下:
GET http://proj1.example.com/path/being/requested HTTP/1.0
Host: proj1.example.com
User-Agent: [blah blah blah]
Cookie: [cookie info]这个反应看起来就像
HTTP/1.0 200 OK
(new line)
<html>
...
</html>Apache通过主机/url中的域名知道请求的主机,并相应地提取内容。
更多的文档可以在这里找到:http://httpd.apache.org/docs/2.1/vhosts/name-based.html
Host报头,所以如果您想在同一台机器上设置虚拟主机,它必须使用多个ip地址并将每个ip地址绑定到一个唯一的站点。网络上的一些文档可能仍然反映了这一点。一般来说,tho不需要担心这一点,因为现在所有浏览器都支持使用Host头https://serverfault.com/questions/116438
复制相似问题