apache虚拟主机和“动态”域

时间:2011-08-04 10:24:12

标签: apache dynamic alias virtualhost restart

我有一个java应用程序响应多个域,并为每个域使用特定的apache虚拟主机。这是因为Apache比tomcat更快,以提供静态资源。

需要在运行时执行此操作,而无需重新启动apache配置。 要执行此操作,我正在使用VirtualDocumentRoot指令,如下所述:

AddType text/html .html .shtml
AddOutputFilter INCLUDES .html .shtml

NameVirtualHost *:80
UseCanonicalName Off
<VirtualHost *:80>
    ServerName domain.com
    ServerAlias *

    # Define virtual host directory, using entire domain
    VirtualDocumentRoot /path/to/whosts/%0

    # Define directory access
    <Directory "/path/to/whosts/">
        Options -Indexes MultiViews +Includes
        Order allow,deny
        Allow from all
    </Directory>

    # Define Java Proxies
    <Proxy *>
        AddDefaultCharset Off
        Order deny,allow
        Allow from all
    </Proxy>

    # Allow Libs (static resources) to access apache directly
    ProxyPass /libs !
    ProxyPass / ajp://localhost:8009/
    ProxyPassReverse / ajp://localhost:8009/
</VirtualHost>

这不行,因为如果我尝试访问www.domain.com,则与访问domain.com不同。

您认为注册www.domain.com至domain.com的符号链接是个好主意吗???

还有其他办法吗?阿帕奇管理我真的很穷......

非常感谢!

Ciao,Davide。

2 个答案:

答案 0 :(得分:2)

在进行与此类似的配置时,我经常使用符号链接将多个域链接到同一个webroot,在该解决方案中没有明显的伤害,因此绝对没有理由回避它。

答案 1 :(得分:0)

一种好方法是确定哪种类型的网址应该是规范网址,并使用mod_rewrite将网址重定向到它 - 例如,将请求匹配到domain.com并将其重定向到{{ 1}}。有很多关于如何在网上提供的教程,您应该可以轻松找到它。

在我的头顶,你可以使用类似的东西:

www.domain.com

但是,由于硬编码RewriteEngine on RewriteCond %{HTTP_HOST} !^www\.$ [NC] RewriteRule ^(.*) http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L] ,如果您使用SSL,则会导致问题。我认为您可以将RewriteRule行更改为以下内容以避免这种情况:

http://