Hugo Apache Macros, Make Site Maintenance Easy
Apache macros allow for fast and consistent site setup. Here I show how to setup mod_macro and provide a example configurationUsing Apache
I like to use templates for things I will do more then once. Apache has a template system named mod_macro The things macros make easy (for me):
- Virtual Host management
- Cache configuration per object/category associated to VirtualHost
- maintaining allowed served file types (blocking file extensions and directories) EG: .git .secrets .jpg
enable apache macro module
a2enmod macro
LoadModule macro_module /usr/lib/apache2/modules/mod_macro.so
Create macro templates
Example Development SSL Virtual Host
Here I enable
1. apache generated directory index access for local networks
2. SSL Certificates known at a certain path managed by certbot
3. Specific cache rules for object types and filenames
<Macro SSLHostDev $host $port $dir $chain $key>
<VirtualHost *:$port>
ServerName $host
DocumentRoot "$dir"
SSLEngine on
SSLCertificateFile $chain
SSLCertificateKeyFile $key
<Directory "$dir">
Require ip 192.168.8.0/24
Require ip 192.168.193.0/24
Options Indexes FollowSymLinks
</Directory>
ErrorLog ${APACHE_LOG_DIR}/$host_error.log
CustomLog ${APACHE_LOG_DIR}/$host_access.log combined
<IfModule mod_expires.c>
<FilesMatch "\.(html)$">
ExpiresActive On
ExpiresDefault "access plus 10 minutes"
</FilesMatch>
<FilesMatch "\.(xml)$">
ExpiresActive On
ExpiresDefault "access plus 90 minutes"
</FilesMatch>
<FilesMatch ".(ico|pdf|flv|jpg|jpeg|png|gif|js|css|swf|webp)$">
Header set Cache-Control "s-max-age=3600, public"
ExpiresActive On
ExpiresDefault "access plus 30 days"
</FilesMatch>
ExpiresByType image/wepb A2592000
ExpiresByType image/jpeg A2592000
<FilesMatch ".(webp)$">
Header set X-Robots-Tag: noindex
</FilesMatch>
<FilesMatch "\.(?i:jpg)$">
Order allow,deny
Deny from all
</FilesMatch>
</IfModule>
</VirtualHost>
</Macro>
define macro configuration line
Once a macro is defined you can enable sites with a single line. The line says use the template named SSLHostDev each space separated entry is related to the variables defined at the start of the template.
<Macro SSLHostDev $host $port $dir $chain $key>
Use SSLHostDev 65483-d.rasor.org 443 /www/65483-d.rasor.org/public /etc/letsencrypt/live/rasor.org/fullchain.pem /etc/letsencrypt/live/rasor.org/privkey.pem
If you would like email or rss feed updates. Visit the Subscribe page