我已经设置了一个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配置的新手,我觉得随着虚拟主机定义数量的增加,我的配置文件变得越来越冗余。
答案 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访问权。