我有一个在 CentOS 上运行的 Plone 服务器,我有多个运行 4.0 和 4.1 的 Plone 实例,我还有多个站点。我是 Linux 新手,在让 Apache 与多个虚拟主机一起工作时遇到了问题。列出的第一个主机工作正常,但第二个主机却不行。启动 HTTPD 时收到以下错误消息:
Starting httpd: [Mon Nov 07 14:38:31 2011] [warn] VirtualHost ordevel3.ucdavis.edu:80 overlaps with VirtualHost ordevel4.ucdavis.edu:80,
the first has precedence, perhaps you need a NameVirtualHost directive.
我缺少什么才能使虚拟主机正常工作?
下面是我在 httpd.conf 中的语法。
<VirtualHost ordevel3.abc.edu:80>
ServerAlias ordevel3.abc.edu
ServerAdmin [email protected]
ServerSignature On
<IfModule mod_rewrite.c>
RewriteEngine On
# serving icons from apache 2 server
RewriteRule ^/icons/ - [L]
RewriteRule ^/(.*) \
http://localhost:8080/VirtualHostBase/http/%{SERVER_NAME}:80/itsdevel3/VirtualHostRoot/$1 [L,P]
</IfModule>
<IfModule mod_proxy.c>
ProxyVia On
# prevent the webserver from beeing used as proxy
<LocationMatch "^[^/]">
Deny from all
</LocationMatch>
</IfModule>
</VirtualHost>
<VirtualHost ordevel4.abc.edu:80>
ServerAlias ordevel4.abc.edu
ServerAdmin [email protected]
ServerSignature On
<IfModule mod_rewrite.c>
RewriteEngine On
# serving icons from apache 2 server
RewriteRule ^/icons/ - [L]
RewriteRule ^/(.*) \
http://localhost:8180/VirtualHostBase/http/%{SERVER_NAME}:80/ITS/VirtualHostRoot/$1 [L,P]
</IfModule>
<IfModule mod_proxy.c>
ProxyVia On
# prevent the webserver from beeing used as proxy
<LocationMatch "^[^/]">
Deny from all
</LocationMatch>
</IfModule>
</VirtualHost>
答案1
您需要更改以下几行:
<VirtualHost ordevel3.abc.edu:80>
ServerAlias ServerAlias ordevel3.abc.edu
第一行应该包含 IP 或 *(通配符),而不是域名。如果您想使用基于名称的 VirtualHosts,则应定义 ServerName。ServerAlias 仅用于向已有名称的 VirtualHost 添加别名。
因此这些行应该如下所示:
<VirtualHost *:80>
ServerName ordevel3.abc.edu
如果此虚拟主机可以通过名称 sth.ordevel3.abc.edu 访问,则可以添加别名:
ServerAlias sth.ordevel3.abc.edu
如果仍然出现相同的错误,则必须确保您的 httpd.conf 包含以下行以激活命名虚拟主机:
NameVirtualHost *:80
欲了解更多信息,可以查阅 Apache 手册:
附言:我没有仔细查看您的重定向和其他配置,因为这不是问题所在。