【问题标题】:Globally define parts of virtualhost definition to reduce redundancy全局定义部分虚拟主机定义以减少冗余
【发布时间】:2012-06-22 18:29:09
【问题描述】:

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

【问题讨论】:

    标签: apache virtualhost


    【解决方案1】:

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

    其次,有一个名为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 访问权限。

    【讨论】:

    • 我从您与我共享的文档中下载并提取了“mod_macro-1.2.1”。我提取它并执行“apxs -cia /mod_macro.c”,这给了我以下错误无法打开 /usr/lib64/httpd/build/config_vars.mk: No such file or directory at /usr/sbin/apxs line 201 .
    • 为了克服这个问题,我安装了“apr-devel”和“httpd-devel”,但仍然遇到错误。您是否知道任何其他安装 mod_macro 的方法?
    • 看起来它可以作为 RPM 提供——见rpmfind.net/linux/rpm2html/search.php?query=apache-mod_macro 否则你能告诉我实际的错误吗?
    • "警告:/root/apache-mod_macro-1.1.11-3-mdv2011.0.i586.rpm:标头 V3 DSA 签名:NOKEY,密钥 ID 78d019f5";这是我遇到的错误
    • 对不起,你需要自己弄清楚包装的东西。对于该错误,这意味着您需要导入相关 repo 的密钥才能继续。从长远来看,从源代码编译可能会更容易。
    猜你喜欢
    • 1970-01-01
    • 2014-08-28
    • 1970-01-01
    • 2017-05-28
    • 2016-08-30
    • 2015-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多