Apache Config - сгруппированные виртуальные хосты с общими директивами? - PullRequest
0 голосов
/ 18 февраля 2019

Я управляю своим файлом конфигурации apache вручную и стараюсь поддерживать его как можно более аккуратным, чистым и организованным.Поскольку я внедряю SSL сайт за сайтом, появляется все больше и больше директивных дубликатов, которые заставляют меня искать решение.Кто-то отправил мне mod_marco, но это не поддерживается в моей версии Apache.В любом случае я надеялся на более простое решение.Вот пара определений виртуальных хостов, которые очень похожи на те, которые у меня есть на самом деле.Один для основного сайта, а другой для мобильного сайта:

<VirtualHost *:443>
    ServerName www.example.com
    ServerAlias example.com
    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/example.com/cert.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
    SSLCertificateChainFile /etc/letsencrypt/live/example.com/chain.pem
    DocumentRoot /webfolder/odometerlog/www
    CustomLog "/logs/example.access.log" combined
    ErrorLog "/logs/example.error.log"
    <Directory "/webfolder/example/www">
        Require all granted
    </Directory>
    Alias "/js/" "/webfolder/example/shared/js/"
    Alias "/css/" "/webfolder/example/shared/css/"
    Alias "/images/" "/webfolder/example/shared/images/"
    Alias "/sounds/" "/webfolder/example/shared/sounds/"
    Alias "/tech/" "/webfolder/example/shared/tech/"
    RewriteEngine On
    RewriteRule ^/archives/([0-9]{4})/([0-9]{2})/$ /archives/index.php?year=$1&month=$2
</VirtualHost>

<VirtualHost *:443>
    ServerName m.example.com
    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/example.com/cert.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
    SSLCertificateChainFile /etc/letsencrypt/live/example.com/chain.pem
    DocumentRoot /webfolder/odometerlog/m
    CustomLog "/logs/example_m.access.log" combined
    ErrorLog "/logs/example_m.error.log"
    <Directory "/webfolder/example/m">
        Require all granted
    </Directory>
    Alias "/js/" "/webfolder/example/shared/js/"
    Alias "/css/" "/webfolder/example/shared/css/"
    Alias "/images/" "/webfolder/example/shared/images/"
    Alias "/sounds/" "/webfolder/example/shared/sounds/"
    Alias "/tech/" "/webfolder/example/shared/tech/"
    RewriteEngine On
    RewriteRule ^/archives/([0-9]{4})/([0-9]{2})/$ /archives/index.php?year=$1&month=$2
</VirtualHost>

И это то, во что я хотел бы превратить это?Простой «групповой» или «родительский» контейнер, в который я могу вставить виртуальные хосты, а затем вставить некоторые директивы, которые будут доступны всем виртуальным хостам, содержащимся в нем.На первый взгляд может показаться, что я не сохраняю столько строк кода конфигурации.Но многие из моих сайтов имеют более двух отдельных виртуальных хостов.Это сделало бы чтение и поддержание моей конфигурации намного проще, сделав ее намного более организованной.Но существует ли что-нибудь подобное?

<VirtualHostGroup>
    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/example.com/cert.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
    SSLCertificateChainFile /etc/letsencrypt/live/example.com/chain.pem
    Alias "/js/" "/webfolder/example/shared/js/"
    Alias "/css/" "/webfolder/example/shared/css/"
    Alias "/images/" "/webfolder/example/shared/images/"
    Alias "/sounds/" "/webfolder/example/shared/sounds/"
    Alias "/tech/" "/webfolder/example/shared/tech/"
    RewriteEngine On
    RewriteRule ^/archives/([0-9]{4})/([0-9]{2})/$ /archives/index.php?year=$1&month=$2

    <VirtualHost *:443>
        ServerName www.example.com
        ServerAlias example.com
        DocumentRoot /webfolder/example/www
        CustomLog "/logs/example.access.log" combined
        ErrorLog "/logs/example.error.log"
        <Directory "/webfolder/example/www">
            Require all granted
        </Directory>
    </VirtualHost>

    <VirtualHost *:443>
        ServerName m.example.com
        DocumentRoot /webfolder/example/m
        CustomLog "/logs/example_m.access.log" combined
        ErrorLog "/logs/example_m.error.log"
        <Directory "/webfolder/example/m">
            Require all granted
        </Directory>
    </VirtualHost>
</VirtualHostGroup>

Также обратите внимание, что я знаю, что могу размещать директивы вне своих виртуальных хостов, и они становятся значениями по умолчанию для директив, явно не определенных в виртуальном хосте.Но это не поможет мне, я размещаю много сайтов на своем сервере.Я ищу способ добавить еще один слой к этой настройке, где я могу определить свои собственные промежуточные группы между «глобальным» и каждым виртуальным хостом.

...