From 203206fab11ee55b1193ff9432350bf3b1731da9 Mon Sep 17 00:00:00 2001 From: Dmitriy Rabotyagov Date: Wed, 24 Jul 2024 19:32:50 +0200 Subject: [PATCH] feat: Allow vhosts to listen on own hosts Current vhosts defenition limit them to listen only on single IP/port. In the meanwhile, there are usecases where vhosts on the same server might wanna listen on different quite independent set of IPs/ports, which is not currently possible. This patch adds such functionality, and an operator might define extra properties for apache_vhosts to make them listening on required ports/interfaces. --- defaults/main.yml | 2 +- molecule/default/converge.yml | 4 ++++ templates/vhosts.conf.j2 | 20 ++++++++++++++++++-- 3 files changed, 23 insertions(+), 3 deletions(-) diff --git a/defaults/main.yml b/defaults/main.yml index c1ecb504..c034b78c 100644 --- a/defaults/main.yml +++ b/defaults/main.yml @@ -18,7 +18,7 @@ apache_global_vhost_settings: | apache_vhosts: # Additional properties: - # 'serveradmin, serveralias, allow_override, options, extra_parameters'. + # 'serveradmin, serveralias, allow_override, options, extra_parameters, listen_ip, listen_port'. - servername: "local.dev" documentroot: "/var/www/html" diff --git a/molecule/default/converge.yml b/molecule/default/converge.yml index 416a2b96..6cb93aef 100644 --- a/molecule/default/converge.yml +++ b/molecule/default/converge.yml @@ -10,6 +10,10 @@ apache_vhosts: - servername: "example.com" documentroot: "/var/www/vhosts/example_com" + - servername: "local.example.com" + documentroot: "/var/www/vhosts/example_com" + listen_ip: 127.0.0.1 + listen_port: 8080 pre_tasks: - name: Update apt cache. diff --git a/templates/vhosts.conf.j2 b/templates/vhosts.conf.j2 index b5307b94..beb90931 100644 --- a/templates/vhosts.conf.j2 +++ b/templates/vhosts.conf.j2 @@ -1,8 +1,24 @@ {{ apache_global_vhost_settings }} {# Set up VirtualHosts #} +{% set _extra_listen_list = [] %} +{% for vhost in (apache_vhosts | selectattr('listen_ip', 'defined') + apache_vhosts | selectattr('listen_port', 'defined')) | unique %} +{% set _ = _extra_listen_list.append({ + 'ip': vhost.listen_ip | default(apache_listen_ip)), + 'port': vhost.listen_port | default(apache_listen_port) +} %} +{% endfor %} +{% for listen in _extra_listen_list | unique %} +{% if apache_vhosts_version == '2.2' %} +Listen {{ listen['port'] }} +NameVirtualHost {{ listen['ip'] }}:{{ listen['port'] }} +{% elif apache_vhosts_version == '2.4' %} +Listen {{ (listen['ip'] == '*') | ternary('', listen['ip'] + ':') }}{{ listen['port'] }} +{% endif %} +{% endfor %} + {% for vhost in apache_vhosts %} - + ServerName {{ vhost.servername }} {% if vhost.serveralias is defined %} ServerAlias {{ vhost.serveralias }} @@ -36,7 +52,7 @@ {# Set up SSL VirtualHosts #} {% for vhost in apache_vhosts_ssl %} {% if apache_ignore_missing_ssl_certificate or apache_ssl_certificates.results[loop.index0].stat.exists %} - + ServerName {{ vhost.servername }} {% if vhost.serveralias is defined %} ServerAlias {{ vhost.serveralias }}