Allow apache formula to set env varibles from mod_env and
mod_setenvif modules

Prod-Related: PROD-36176
Change-Id: Ibb735bf3759558677475d6f9b867efc6c7545b93
diff --git a/README.rst b/README.rst
index fb6b4ae..ced8f6f 100644
--- a/README.rst
+++ b/README.rst
@@ -186,6 +186,31 @@
             limits:
               request_body: 114688
 
+Apache environment modules (mod_env, mod_setendif).
+
+.. code-block:: yaml
+
+    apache:
+      server:
+        site:
+          horizon:
+            env:
+              passenv:
+              - variable: LC_ALL
+                enabled: False
+              setenv:
+              - variable: X-Forwarded-Proxy
+                value: somehost
+                enabled: False
+              unsetenv:
+              - variable: LC_LOCAL
+            envif:
+              browsermatch:
+              - rule: ^MSIE mozilla
+              setenvif:
+              - rule: X-Forwarded-Proto https HTTPS=1
+                enabled: False
+
 Apache redirect site definition.
 
 .. code-block:: yaml
diff --git a/apache/files/_core.conf b/apache/files/_core.conf
index 7aa0cea..f93d952 100644
--- a/apache/files/_core.conf
+++ b/apache/files/_core.conf
@@ -13,3 +13,50 @@
   {%- if site.get('keepalive', {}).timeout is defined %}
   KeepAliveTimeout {{ site.keepalive.timeout }}
   {%- endif %}
+
+  {%- if site.env is defined %}
+    {%- for env_var in site.env.get('passenv', []) %}
+      {%- if env_var.get('enabled', True) %}
+  PassEnv {{ env_var.variable }}
+      {%- endif %}
+    {%- endfor %}
+    {%- for env_var in site.env.get('setenv', []) %}
+      {%- if env_var.get('enabled', True) %}
+  SetEnv {{ env_var.variable }} {{ env_var.value }}
+      {%- endif %}
+    {%- endfor %}
+    {%- for env_var in site.env.get('unsetenv', []) %}
+      {%- if env_var.get('enabled', True) %}
+  UnsetEnv {{ env_var.variable }}
+      {%- endif %}
+    {%- endfor %}
+  {%- endif %}
+
+  {%- if site.envif is defined %}
+    {%- for envif_var in site.envif.get('browsermatch', []) %}
+      {%- if envif_var.get('enabled', True) %}
+  BrowserMatch {{ envif_var.rule }}
+      {%- endif %}
+    {%- endfor %}
+    {%- for envif_var in site.envif.get('browsermatchnocase', []) %}
+      {%- if envif_var.get('enabled', True) %}
+  BrowserMatchNoCase {{ envif_var.rule }}
+      {%- endif %}
+    {%- endfor %}
+    {%- for envif_var in site.envif.get('setenvif', []) %}
+      {%- if envif_var.get('enabled', True) %}
+  SetEnvIf {{ envif_var.rule }}
+      {%- endif %}
+    {%- endfor %}
+    {%- for envif_var in site.envif.get('setenvifexpr', []) %}
+      {%- if envif_var.get('enabled', True) %}
+  SetEnvIfExpr {{ envif_var.rule }}
+      {%- endif %}
+    {%- endfor %}
+    {%- for envif_var in site.envif.get('setenvifnocase', []) %}
+      {%- if envif_var.get('enabled', True) %}
+  SetEnvIfNoCase {{ envif_var.rule }}
+      {%- endif %}
+    {%- endfor %}
+  {%- endif %}
+
diff --git a/tests/pillar/server_proxy.sls b/tests/pillar/server_proxy.sls
new file mode 100644
index 0000000..d7d2c48
--- /dev/null
+++ b/tests/pillar/server_proxy.sls
@@ -0,0 +1,40 @@
+apache:
+  server:
+    enabled: true
+    bind:
+      address: '0.0.0.0'
+      ports:
+      - 80
+    modules:
+    - proxy
+    - proxy_http
+    - proxy_balancer
+    site:
+      apache_proxy_site:
+        enabled: true
+        type: proxy
+        name: site_name
+        env:
+          passenv:
+          - variable: LC_ALL
+            enabled: False
+          setenv:
+          - variable: X-Forwarded-Proxy
+            enabled: False
+          unsetenv:
+          - variable: LC_ALL
+        envif:
+          browsermatch:
+          - rule: ^MSIE mozilla
+            enabled: False
+          setenvif:
+          - rule: X-Forwarded-Proto https HTTPS=1
+        proxy:
+          host: 127.0.0.1
+          port: 8080
+          protocol: http
+          retry: 30
+        host:
+          name: 127.0.1.1
+          port: 9001
+          address: 127.0.1.1