mod_vhs is an Apache 2.2 and 2.4 Web Server module allowing mass virtual hosting without the need for file based configuration. The virtual host paths are translated from a Redis Database
Version 2 comes from evolution of the original mod_vhs module (https://bitbucket.org/cosmomill/mod_vhs). It has been designed for shared PHP hosting with the following modifications :
- Only works with PHP (5.x and 7.0)
- PHP dynamic configuration for
session_pathandsendmail_path - Only 1 database support : Redis
- Caching
- MPM ITK support
- Debian packages : tested on Debian Wheezy, Jessie and Stretch
- Continuous integration and testing (see
.drone.yml)
A custom mod_vhs version with ITK, PHP 7 and flatfile (passwd style) database support is in production since 2006 at Planet-Work for the shared hosting platform (20k+ websites).
This module is designed for running PHP in read-only and stateless containers in conjunction with libnss-redis
All the virtualhosts are in a Redis database in JSON format. The key is WEBHOST/v1/host
{
"status": "enabled",
"vhost": "test.planet-work.wf",
"host": "test.planet-work.wf",
"no_public_html": 0,
"frontend": {
"deny": [],
"allow": [
"ALL"
],
"redirect_https": false,
"proxy_only": 0,
"HSTS": false,
"env": "php5.6"
},
"user": "planet-work",
"directory": "test",
"backend": {
"mysql_socket": "/var/run/mysqld/thales",
"php_mode": "default",
"php_config": {
"short_open_tag": "1",
"display_errors": "1"
}
}
}frontend is for Nginx (TODO), backend is the configuration for mod_vhs.
See .drone.yml file for building and installation example.
On Debian Stretch system :
apt-get install -y libhiredis-dev php7.0-dev apache2-dev libjson-c-dev
dpkg-buildpackage -b
/etc/apache2/mods-availabled/vhs.conf :
<IfModule mod_vhs.c>
EnableVHS On
vhs_Default_Host "localhost"
vhs_Alias /admin-global/ /var/www/admin-global/
vhs_ScriptAlias /common-cgi-bin/ /usr/lib/cgi-bin/
vhs_CacheTTL 10
vhs_CacheCleanInter 10
vhs_RedisHost "/run/redis/redis-webconf.sock"
vhs_PhpSessionAddr "tcp://10.3.100.1:6379?prefix=phpredis_"
vhs_PhpSendmailPath "/usr/sbin/sendmail_hook"
</IfModule>
mod_vhs only works with mpm_itk (prefork).
ITK module 2.4 (Debian Jessie and Stretch) need CAP_DAC_READ_SEARCH capability which is dropped by Docker un unprivilefed containers.
Frédéric VANNIÈRE f.vanniere@planet-work.com
Original author : Xavier Beaudouin kiwi@oav.net