0

我已经设置了一个 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 配置的新手,我觉得随着虚拟主机定义数量的增加,我的配置文件变得更长和多余。

4

1 回答 1

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 访问权限。

于 2012-06-20T16:41:01.927 回答