设置虚拟主机 难度:新手 技能: 对Zope的URL里的名字空间语法有一个基本的理解。 你应该熟悉Apache的配置文件。 问题/任务: 在Zope世界里一个最普遍的任务就是将Zope隐藏在Apache服务器的后面。这样做是为了使用所有Apache提供的良好的特性,最重要的是SSL加密特性。 解决方案: Apache及其他网络服务器是通过在虚拟主机中指定的重写规则来连接到Zope的。 正确的解释这些请求并提供有意义的输出是Zope的任务。 你可能认为这是很容易的,因为你只须指向Zope服务器的正确的URL。 但是这只是问题的一半。指向另一个对象的URL是怎么样的呢? 在这一点上你需要告诉Zope真实的虚拟主机住址是什么。 在Zope3中通过利用一个特殊的名字空间叫"vh"来完成的。它指定了"公共的"地址。 在我们可以在我们的服务器上开始建立一个虚拟主机之前,我们将完成以下的清单: ⒈确定Zope3运行在http://localhost:8080/site/或者类是的http://destination url:port/path-to-site/这样的路径。 ⒉确定Apache运行在http://www.example.com:80/或者类似http://public url:port/的路径。 Zope3使用它的URL名字空间性能来提供虚拟主机,所以不需要特殊组件或者编码实践。这意味着虚拟主机是永远可用的。 通常的,通过在URL中加入++namespace++元素来指定一个名字空间。对于vh名字空间,我们有++vh++Public-URL++。注意在URL结尾处的++是特指给vh名字空间的。用标明了Public URL的末尾。 名字空间手段的好处是,一个人永远不会由于错误的配置而将她/他自己锁在外面。 有些Zope2的虚拟主机解决方案就有这个问题并且引来不必要的头痛。 在Zope2中还不得不增加一个额外的对象。 Zope3对于这个任务不利用任何的服务或者实用工具,这些使虚拟主机成为一个非常核心的功能。 然而,从Apache的观点,建立的过程很类似于Zope2。在httpd.conf文件--通常的可以在/etc或者/etc/httpd下面找到--插入以下的行: 1 LoadModule proxy_module /path/to/apache/1.3/libproxy.so 2 3 Listen 80 4 5 NameVirtualHost *:80 6 7 <VirtualHost *:80> 8 SSLDisable 9 ServerName www.example.com 10 RewriteEngine On 11 RewriteRule ^/site(/?.*) \ 12 http://localhost:8080/site/++vh++http:www.example.com:80/site/++$1 \ 13 [P,L] 14 CustomLog /var/log/apache/example.com/access.log combined 15 ErrorLog /var/log/apache/example.com/error.log 16 </VirtualHost> 行1:载入允给重写和URL的模块。 行3:设置Apache服务器的默认端口80。 行5:声明所有在80端口上进入的请求作为虚拟主机的站点。 行7-16:这些全部是在80端口上虚拟主机的特别配置。 行8:对于通讯不使用SSL加密。我们只允许正常的HTTP连接。 行9:虚拟主机对外界的名字是www.example.com。 行10:开启重写引擎,基本上告诉Apache这个虚拟主机将要重写和重定向请求。 行11-13:在这些行里面的代码应该是在一行里的。它定义了实际的重写规则。这个规则说道:"如果你要找在主机名和端口后面以/site开头的URL 的话,那么重定向这个URL到http://localhost:8080/site/+vh++http:www.example.com:80/site/++后面加上任意的需要加的内容。" 例如:www.example.com:80/site/hello.html将被重写为http:// localhost:8080/site/++vh++http:www.example.com:80/site/++/hello.html。 注意,++vh++后面的部分必须严谨的遵守这样的样式:"协议:主机:端口/路径(protocol:host:port/path)"。即使端口是80,你也必须指定它。 行14:定义访问日志的位置。 行15:定义错误日志的位置。 我们完成了。很简单,不是吗?所有你需要做的就是重启Apache,以便使改变的配置生效。 在Zope3方面不需要任何特殊的配置。 Zope实际上完全没有注意到虚拟主机的设置。 注意,你并不必需将www.example.com/site映射到localhost:8080/site,取而代之的是你可以选择Zope服务器上的任何位置。 你现在可以联合其它的Apache配置项目到以上所述的设置中,例如SSL。只是使用443端口来代替80端口并启动SSL即可。 当前的问题:在管理界面里的XML导航树不支持虚拟主机,这是由于它看待URL的方式决定的。 感谢Marius Gedminas提供的正确的Apache设置。