全局定义虚拟主机定义的各个部分以减少冗余

时间:2012-06-20 15:12:55

标签: apache virtualhost

我已经设置了一个apache服务器,这个apache服务器指向一堆虚拟主机。

虚拟主机的定义如下,

<VirtualHost *:80>
        ServerName <url>

        RewriteEngine on
        ReWriteCond %{SERVER_PORT} !^443$
        RewriteRule ^/(.*) https://%{HTTP_HOST}/$1 [NC,R,L]

        # Enable client-side caching of resources
        ExpiresActive On
        ExpiresByType image/png "now plus 48 hours"
        ExpiresByType image/jpeg "now plus 48 hours"
        ExpiresByType image/gif "now plus 48 hours"
        ExpiresByType application/javascript "now plus 48 hours"
        ExpiresByType application/x-javascript "now plus 48 hours"
        ExpiresByType text/javascript "now plus 48 hours"
        ExpiresByType text/css "now plus 48 hours"

</VirtualHost>

.
.
.

<VirtualHost *:80>
        ServerName <url>

        RewriteEngine on
        ReWriteCond %{SERVER_PORT} !^443$
        RewriteRule ^/(.*) https://%{HTTP_HOST}/$1 [NC,R,L]

        # Enable client-side caching of resources
        ExpiresActive On
        ExpiresByType image/png "now plus 48 hours"
        ExpiresByType image/jpeg "now plus 48 hours"
        ExpiresByType image/gif "now plus 48 hours"
        ExpiresByType application/javascript "now plus 48 hours"
        ExpiresByType application/x-javascript "now plus 48 hours"
        ExpiresByType text/javascript "now plus 48 hours"
        ExpiresByType text/css "now plus 48 hours"

</VirtualHost>

我有大量虚拟主机定义,类似于上面显示的示例。

由于除了ServerName以外的大多数定义都是相同的,我想知道是否有办法在全球范围内定义这些通用定义。

我是apache配置的新手,我觉得随着虚拟主机定义数量的增加,我的配置文件变得越来越冗余。

1 个答案:

答案 0 :(得分:0)

你有几个选择。首先,根据您要使用的指令,您可以在服务器级别添加它。

其次,有一个名为mod_macro的模块专门用于此用例。您可以为虚拟主机定义单个宏:

<Macro VHost $host $port $dir>
  Listen $port
  <VirtualHost *:$port>
    ServerName $host
    DocumentRoot $dir

    <Directory $dir>
      # do something here...
    </Directory>

    # etc etc etc

  </VirtualHost>
</Macro>

然后像这样调用它:

Use VHost www.apache.org 80 /projects/apache/web

您也可以为您的Exipres指令声明一个宏,并通过调用

来包含它
Use ExpireMacro

在您的虚拟主机内。

我使用mod_macro并且效果很好,这是简化apache配置的绝佳方法。

编辑:我应该提一下,除非你的服务器上已有模块,否则你需要编译并安装它,这意味着你需要root访问权。