Mercurial > repos > other > Puppet
diff modules/apache/manifests/vhost.pp @ 275:d9352a684e62
Mass update of modules to remove deprecation warnings
author | IBBoard <dev@ibboard.co.uk> |
---|---|
date | Sun, 26 Jan 2020 11:36:07 +0000 |
parents | 675c1cc61eaf |
children | b8d6ada284dd |
line wrap: on
line diff
--- a/modules/apache/manifests/vhost.pp Sat Jan 04 11:42:45 2020 +0000 +++ b/modules/apache/manifests/vhost.pp Sun Jan 26 11:36:07 2020 +0000 @@ -1,176 +1,1862 @@ -# See README.md for usage information +# @summary +# Allows specialised configurations for virtual hosts that possess requirements +# outside of the defaults. +# +# The apache module allows a lot of flexibility in the setup and configuration of virtual hosts. +# This flexibility is due, in part, to `vhost` being a defined resource type, which allows Apache +# to evaluate it multiple times with different parameters.<br /> +# The `apache::vhost` defined type allows you to have specialized configurations for virtual hosts +# that have requirements outside the defaults. You can set up a default virtual host within +# the base `::apache` class, as well as set a customized virtual host as the default. +# Customized virtual hosts have a lower numeric `priority` than the base class's, causing +# Apache to process the customized virtual host first.<br /> +# The `apache::vhost` defined type uses `concat::fragment` to build the configuration file. To +# inject custom fragments for pieces of the configuration that the defined type doesn't +# inherently support, add a custom fragment.<br /> +# For the custom fragment's `order` parameter, the `apache::vhost` defined type uses multiples +# of 10, so any `order` that isn't a multiple of 10 should work.<br /> +# > **Note:** When creating an `apache::vhost`, it cannot be named `default` or `default-ssl`, +# because vhosts with these titles are always managed by the module. This means that you cannot +# override `Apache::Vhost['default']` or `Apache::Vhost['default-ssl]` resources. An optional +# workaround is to create a vhost named something else, such as `my default`, and ensure that the +# `default` and `default_ssl` vhosts are set to `false`: +# +# @example +# class { 'apache': +# default_vhost => false, +# default_ssl_vhost => false, +# } +# +# @param apache_version +# Apache's version number as a string, such as '2.2' or '2.4'. +# +# @param access_log +# Determines whether to configure `*_access.log` directives (`*_file`,`*_pipe`, or `*_syslog`). +# +# @param access_log_env_var +# Specifies that only requests with particular environment variables be logged. +# +# @param access_log_file +# Sets the filename of the `*_access.log` placed in `logroot`. Given a virtual host ---for +# instance, example.com--- it defaults to 'example.com_ssl.log' for +# [SSL-encrypted](https://httpd.apache.org/docs/current/ssl/index.html) virtual hosts and +# `example.com_access.log` for unencrypted virtual hosts. +# +# @param access_log_format +# Specifies the use of either a `LogFormat` nickname or a custom-formatted string for the +# access log. +# +# @param access_log_pipe +# Specifies a pipe where Apache sends access log messages. +# +# @param access_log_syslog +# Sends all access log messages to syslog. +# +# @param access_logs +# Allows you to give a hash that specifies the state of each of the `access_log_*` +# directives shown above, i.e. `access_log_pipe` and `access_log_syslog`. +# +# @param add_default_charset +# Sets a default media charset value for the `AddDefaultCharset` directive, which is +# added to `text/plain` and `text/html` responses. +# +# @param add_listen +# Determines whether the virtual host creates a `Listen` statement.<br /> +# Setting `add_listen` to `false` prevents the virtual host from creating a `Listen` +# statement. This is important when combining virtual hosts that aren't passed an `ip` +# parameter with those that are. +# +# @param use_optional_includes +# Specifies whether Apache uses the `IncludeOptional` directive instead of `Include` for +# `additional_includes` in Apache 2.4 or newer. +# +# @param additional_includes +# Specifies paths to additional static, virtual host-specific Apache configuration files. +# You can use this parameter to implement a unique, custom configuration not supported by +# this module. +# +# @param aliases +# Passes a list of [hashes][hash] to the virtual host to create `Alias`, `AliasMatch`, +# `ScriptAlias` or `ScriptAliasMatch` directives as per the `mod_alias` documentation.<br /> +# For example: +# ``` puppet +# aliases => [ +# { aliasmatch => '^/image/(.*)\.jpg$', +# path => '/files/jpg.images/$1.jpg', +# }, +# { alias => '/image', +# path => '/ftp/pub/image', +# }, +# { scriptaliasmatch => '^/cgi-bin(.*)', +# path => '/usr/local/share/cgi-bin$1', +# }, +# { scriptalias => '/nagios/cgi-bin/', +# path => '/usr/lib/nagios/cgi-bin/', +# }, +# { alias => '/nagios', +# path => '/usr/share/nagios/html', +# }, +# ], +# ``` +# For the `alias`, `aliasmatch`, `scriptalias` and `scriptaliasmatch` keys to work, each needs +# a corresponding context, such as `<Directory /path/to/directory>` or +# `<Location /some/location/here>`. Puppet creates the directives in the order specified in +# the `aliases` parameter. As described in the `mod_alias` documentation, add more specific +# `alias`, `aliasmatch`, `scriptalias` or `scriptaliasmatch` parameters before the more +# general ones to avoid shadowing.<BR /> +# > **Note**: Use the `aliases` parameter instead of the `scriptaliases` parameter because +# you can precisely control the order of various alias directives. Defining `ScriptAliases` +# using the `scriptaliases` parameter means *all* `ScriptAlias` directives will come after +# *all* `Alias` directives, which can lead to `Alias` directives shadowing `ScriptAlias` +# directives. This often causes problems; for example, this could cause problems with Nagios.<BR /> +# If `apache::mod::passenger` is loaded and `PassengerHighPerformance` is `true`, the `Alias` +# directive might not be able to honor the `PassengerEnabled => off` statement. See +# [this article](http://www.conandalton.net/2010/06/passengerenabled-off-not-working.html) for details. +# +# @param allow_encoded_slashes +# Sets the `AllowEncodedSlashes` declaration for the virtual host, overriding the server +# default. This modifies the virtual host responses to URLs with `\` and `/` characters. The +# default setting omits the declaration from the server configuration and selects the +# Apache default setting of `Off`. +# +# @param block +# Specifies the list of things to which Apache blocks access. Valid options are: `scm` (which +# blocks web access to `.svn`), `.git`, and `.bzr` directories. +# +# @param cas_attribute_prefix +# Adds a header with the value of this header being the attribute values when SAML +# validation is enabled. +# +# @param cas_attribute_delimiter +# Sets the delimiter between attribute values in the header created by `cas_attribute_prefix`. +# +# @param cas_login_url +# Sets the URL to which the module redirects users when they attempt to access a +# CAS-protected resource and don't have an active session. +# +# @param cas_root_proxied_as +# Sets the URL end users see when access to this Apache server is proxied per vhost. +# This URL should not include a trailing slash. +# +# @param cas_scrub_request_headers +# Remove inbound request headers that may have special meaning within mod_auth_cas. +# +# @param cas_sso_enabled +# Enables experimental support for single sign out (may mangle POST data). +# +# @param cas_validate_saml +# Parse response from CAS server for SAML. +# +# @param cas_validate_url +# Sets the URL to use when validating a client-presented ticket in an HTTP query string. +# +# @param comment +# Adds comments to the header of the configuration file. Pass as string or an array of strings. +# For example: +# ``` puppet +# comment => "Account number: 123B", +# ``` +# Or: +# ``` puppet +# comment => [ +# "Customer: X", +# "Frontend domain: x.example.org", +# ] +# ``` +# +# @param custom_fragment +# Passes a string of custom configuration directives to place at the end of the virtual +# host configuration. +# +# @param default_vhost +# Sets a given `apache::vhost` defined type as the default to serve requests that do not +# match any other `apache::vhost` defined types. +# +# @param directoryindex +# Sets the list of resources to look for when a client requests an index of the directory +# by specifying a '/' at the end of the directory name. See the `DirectoryIndex` directive +# documentation for details. +# +# @param docroot +# **Required**.<br /> +# Sets the `DocumentRoot` location, from which Apache serves files.<br /> +# If `docroot` and `manage_docroot` are both set to `false`, no `DocumentRoot` will be set +# and the accompanying `<Directory /path/to/directory>` block will not be created. +# +# @param docroot_group +# Sets group access to the `docroot` directory. +# +# @param docroot_owner +# Sets individual user access to the `docroot` directory. +# +# @param docroot_mode +# Sets access permissions for the `docroot` directory, in numeric notation. +# +# @param manage_docroot +# Determines whether Puppet manages the `docroot` directory. +# +# @param error_log +# Specifies whether `*_error.log` directives should be configured. +# +# @param error_log_file +# Points the virtual host's error logs to a `*_error.log` file. If this parameter is +# undefined, Puppet checks for values in `error_log_pipe`, then `error_log_syslog`.<br /> +# If none of these parameters is set, given a virtual host `example.com`, Puppet defaults +# to `$logroot/example.com_error_ssl.log` for SSL virtual hosts and +# `$logroot/example.com_error.log` for non-SSL virtual hosts. +# +# @param error_log_pipe +# Specifies a pipe to send error log messages to.<br /> +# This parameter has no effect if the `error_log_file` parameter has a value. If neither +# this parameter nor `error_log_file` has a value, Puppet then checks `error_log_syslog`. +# +# @param error_log_syslog +# Determines whether to send all error log messages to syslog. +# This parameter has no effect if either of the `error_log_file` or `error_log_pipe` +# parameters has a value. If none of these parameters has a value, given a virtual host +# `example.com`, Puppet defaults to `$logroot/example.com_error_ssl.log` for SSL virtual +# hosts and `$logroot/example.com_error.log` for non-SSL virtual hosts. +# +# @param error_documents +# A list of hashes which can be used to override the +# [ErrorDocument](https://httpd.apache.org/docs/current/mod/core.html#errordocument) +# settings for this virtual host.<br /> +# For example: +# ``` puppet +# apache::vhost { 'sample.example.net': +# error_documents => [ +# { 'error_code' => '503', 'document' => '/service-unavail' }, +# { 'error_code' => '407', 'document' => 'https://example.com/proxy/login' }, +# ], +# } +# ``` +# +# @param ensure +# Specifies if the virtual host is present or absent.<br /> +# +# @param fallbackresource +# Sets the [FallbackResource](https://httpd.apache.org/docs/current/mod/mod_dir.html#fallbackresource) +# directive, which specifies an action to take for any URL that doesn't map to anything in +# your filesystem and would otherwise return 'HTTP 404 (Not Found)'. Values must either begin +# with a `/` or be `disabled`. +# +# @param fastcgi_server +# Specify an external FastCGI server to manage a connection to. +# +# @param fastcgi_socket +# Specify the socket that will be used to communicate with an external FastCGI server. +# +# @param fastcgi_idle_timeout +# If using fastcgi, this option sets the timeout for the server to respond. +# +# @param fastcgi_dir +# Specify an internal FastCGI directory that is to be managed. +# +# @param filters +# [Filters](https://httpd.apache.org/docs/current/mod/mod_filter.html) enable smart, +# context-sensitive configuration of output content filters. +# ``` puppet +# apache::vhost { "$::fqdn": +# filters => [ +# 'FilterDeclare COMPRESS', +# 'FilterProvider COMPRESS DEFLATE resp=Content-Type $text/html', +# 'FilterChain COMPRESS', +# 'FilterProtocol COMPRESS DEFLATE change=yes;byteranges=no', +# ], +# } +# ``` +# +# @param h2_copy_files +# Sets the [H2CopyFiles](https://httpd.apache.org/docs/current/mod/mod_http2.html#h2copyfiles) +# directive which influences how the requestion process pass files to the main connection. +# +# @param h2_direct +# Sets the [H2Direct](https://httpd.apache.org/docs/current/mod/mod_http2.html#h2direct) +# directive which toggles the usage of the HTTP/2 Direct Mode. +# +# @param h2_early_hints +# Sets the [H2EarlyHints](https://httpd.apache.org/docs/current/mod/mod_http2.html#h2earlyhints) +# directive which controls if HTTP status 103 interim responses are forwarded to +# the client or not. +# +# @param h2_max_session_streams +# Sets the [H2MaxSessionStreams](https://httpd.apache.org/docs/current/mod/mod_http2.html#h2maxsessionstreams) +# directive which sets the maximum number of active streams per HTTP/2 session +# that the server allows. +# +# @param h2_modern_tls_only +# Sets the [H2ModernTLSOnly](https://httpd.apache.org/docs/current/mod/mod_http2.html#h2moderntlsonly) +# directive which toggles the security checks on HTTP/2 connections in TLS mode. +# +# @param h2_push +# Sets the [H2Push](https://httpd.apache.org/docs/current/mod/mod_http2.html#h2push) +# directive which toggles the usage of the HTTP/2 server push protocol feature. +# +# @param h2_push_diary_size +# Sets the [H2PushDiarySize](https://httpd.apache.org/docs/current/mod/mod_http2.html#h2pushdiarysize) +# directive which toggles the maximum number of HTTP/2 server pushes that are +# remembered per HTTP/2 connection. +# +# @param h2_push_priority +# Sets the [H2PushPriority](https://httpd.apache.org/docs/current/mod/mod_http2.html#h2pushpriority) +# directive which defines the priority handling of pushed responses based on the +# content-type of the response. +# +# @param h2_push_resource +# Sets the [H2PushResource](https://httpd.apache.org/docs/current/mod/mod_http2.html#h2pushresource) +# directive which declares resources for early pushing to the client. +# +# @param h2_serialize_headers +# Sets the [H2SerializeHeaders](https://httpd.apache.org/docs/current/mod/mod_http2.html#h2serializeheaders) +# directive which toggles if HTTP/2 requests are serialized in HTTP/1.1 +# format for processing by httpd core. +# +# @param h2_stream_max_mem_size +# Sets the [H2StreamMaxMemSize](https://httpd.apache.org/docs/current/mod/mod_http2.html#h2streammaxmemsize) +# directive which sets the maximum number of outgoing data bytes buffered in +# memory for an active stream. +# +# @param h2_tls_cool_down_secs +# Sets the [H2TLSCoolDownSecs](https://httpd.apache.org/docs/current/mod/mod_http2.html#h2tlscooldownsecs) +# directive which sets the number of seconds of idle time on a TLS connection +# before the TLS write size falls back to a small (~1300 bytes) length. +# +# @param h2_tls_warm_up_size +# Sets the [H2TLSWarmUpSize](https://httpd.apache.org/docs/current/mod/mod_http2.html#h2tlswarmupsize) +# directive which sets the number of bytes to be sent in small TLS records (~1300 +# bytes) until doing maximum sized writes (16k) on https: HTTP/2 connections. +# +# @param h2_upgrade +# Sets the [H2Upgrade](https://httpd.apache.org/docs/current/mod/mod_http2.html#h2upgrade) +# directive which toggles the usage of the HTTP/1.1 Upgrade method for switching +# to HTTP/2. +# +# @param h2_window_size +# Sets the [H2WindowSize](https://httpd.apache.org/docs/current/mod/mod_http2.html#h2windowsize) +# directive which sets the size of the window that is used for flow control from +# client to server and limits the amount of data the server has to buffer. +# +# @param headers +# Adds lines to replace, merge, or remove response headers. See +# [Apache's mod_headers documentation](https://httpd.apache.org/docs/current/mod/mod_headers.html#header) for more information. +# +# @param ip +# Sets the IP address the virtual host listens on. By default, uses Apache's default behavior +# of listening on all IPs. +# +# @param ip_based +# Enables an [IP-based](https://httpd.apache.org/docs/current/vhosts/ip-based.html) virtual +# host. This parameter inhibits the creation of a NameVirtualHost directive, since those are +# used to funnel requests to name-based virtual hosts. +# +# @param itk +# Configures [ITK](http://mpm-itk.sesse.net/) in a hash.<br /> +# Usage typically looks something like: +# ``` puppet +# apache::vhost { 'sample.example.net': +# docroot => '/path/to/directory', +# itk => { +# user => 'someuser', +# group => 'somegroup', +# }, +# } +# ``` +# Valid values are: a hash, which can include the keys: +# * `user` + `group` +# * `assignuseridexpr` +# * `assigngroupidexpr` +# * `maxclientvhost` +# * `nice` +# * `limituidrange` (Linux 3.5.0 or newer) +# * `limitgidrange` (Linux 3.5.0 or newer) +# +# @param action +# Specifies whether you wish to configure mod_actions action directive which will +# activate cgi-script when triggered by a request. +# +# @param jk_mounts +# Sets up a virtual host with `JkMount` and `JkUnMount` directives to handle the paths +# for URL mapping between Tomcat and Apache.<br /> +# The parameter must be an array of hashes where each hash must contain the `worker` +# and either the `mount` or `unmount` keys.<br /> +# Usage typically looks like: +# ``` puppet +# apache::vhost { 'sample.example.net': +# jk_mounts => [ +# { mount => '/*', worker => 'tcnode1', }, +# { unmount => '/*.jpg', worker => 'tcnode1', }, +# ], +# } +# ``` +# +# @param http_protocol_options +# Specifies the strictness of HTTP protocol checks. +# +# @param keepalive +# Determines whether to enable persistent HTTP connections with the `KeepAlive` directive +# for the virtual host. By default, the global, server-wide `KeepAlive` setting is in effect.<br /> +# Use the `keepalive_timeout` and `max_keepalive_requests` parameters to set relevant options +# for the virtual host. +# +# @param keepalive_timeout +# Sets the `KeepAliveTimeout` directive for the virtual host, which determines the amount +# of time to wait for subsequent requests on a persistent HTTP connection. By default, the +# global, server-wide `KeepAlive` setting is in effect.<br /> +# This parameter is only relevant if either the global, server-wide `keepalive` parameter or +# the per-vhost `keepalive` parameter is enabled. +# +# @param max_keepalive_requests +# Limits the number of requests allowed per connection to the virtual host. By default, +# the global, server-wide `KeepAlive` setting is in effect.<br /> +# This parameter is only relevant if either the global, server-wide `keepalive` parameter or +# the per-vhost `keepalive` parameter is enabled. +# +# @param auth_kerb +# Enable `mod_auth_kerb` parameters for a virtual host.<br /> +# Usage typically looks like: +# ``` puppet +# apache::vhost { 'sample.example.net': +# auth_kerb => `true`, +# krb_method_negotiate => 'on', +# krb_auth_realms => ['EXAMPLE.ORG'], +# krb_local_user_mapping => 'on', +# directories => { +# path => '/var/www/html', +# auth_name => 'Kerberos Login', +# auth_type => 'Kerberos', +# auth_require => 'valid-user', +# }, +# } +# ``` +# +# @param krb_method_negotiate +# Determines whether to use the Negotiate method. +# +# @param krb_method_k5passwd +# Determines whether to use password-based authentication for Kerberos v5. +# +# @param krb_authoritative +# If set to `off`, authentication controls can be passed on to another module. +# +# @param krb_auth_realms +# Specifies an array of Kerberos realms to use for authentication. +# +# @param krb_5keytab +# Specifies the Kerberos v5 keytab file's location. +# +# @param krb_local_user_mapping +# Strips @REALM from usernames for further use. +# +# @param krb_verify_kdc +# This option can be used to disable the verification tickets against local keytab to prevent +# KDC spoofing attacks. +# +# @param krb_servicename +# Specifies the service name that will be used by Apache for authentication. Corresponding +# key of this name must be stored in the keytab. +# +# @param krb_save_credentials +# This option enables credential saving functionality. +# +# @param logroot +# Specifies the location of the virtual host's logfiles. +# +# @param logroot_ensure +# Determines whether or not to remove the logroot directory for a virtual host. +# +# @param logroot_mode +# Overrides the mode the logroot directory is set to. Do *not* grant write access to the +# directory the logs are stored in without being aware of the consequences; for more +# information, see [Apache's log security documentation](https://httpd.apache.org/docs/2.4/logs.html#security). +# +# @param logroot_owner +# Sets individual user access to the logroot directory. +# +# @param logroot_group +# Sets group access to the `logroot` directory. +# +# @param log_level +# Specifies the verbosity of the error log. +# +# @param modsec_body_limit +# Configures the maximum request body size (in bytes) ModSecurity accepts for buffering. +# +# @param modsec_disable_vhost +# Disables `mod_security` on a virtual host. Only valid if `apache::mod::security` is included. +# +# @param modsec_disable_ids +# Removes `mod_security` IDs from the virtual host.<br /> +# Also takes a hash allowing removal of an ID from a specific location. +# ``` puppet +# apache::vhost { 'sample.example.net': +# modsec_disable_ids => [ 90015, 90016 ], +# } +# ``` +# +# ``` puppet +# apache::vhost { 'sample.example.net': +# modsec_disable_ids => { '/location1' => [ 90015, 90016 ] }, +# } +# ``` +# +# @param modsec_disable_ips +# Specifies an array of IP addresses to exclude from `mod_security` rule matching. +# +# @param modsec_disable_msgs +# Array of mod_security Msgs to remove from the virtual host. Also takes a hash allowing +# removal of an Msg from a specific location. +# ``` puppet +# apache::vhost { 'sample.example.net': +# modsec_disable_msgs => ['Blind SQL Injection Attack', 'Session Fixation Attack'], +# } +# ``` +# ``` puppet +# apache::vhost { 'sample.example.net': +# modsec_disable_msgs => { '/location1' => ['Blind SQL Injection Attack', 'Session Fixation Attack'] }, +# } +# ``` +# +# @param modsec_disable_tags +# Array of mod_security Tags to remove from the virtual host. Also takes a hash allowing +# removal of an Tag from a specific location. +# ``` puppet +# apache::vhost { 'sample.example.net': +# modsec_disable_tags => ['WEB_ATTACK/SQL_INJECTION', 'WEB_ATTACK/XSS'], +# } +# ``` +# ``` puppet +# apache::vhost { 'sample.example.net': +# modsec_disable_tags => { '/location1' => ['WEB_ATTACK/SQL_INJECTION', 'WEB_ATTACK/XSS'] }, +# } +# ``` +# +# @param modsec_audit_log_file +# If set, it is relative to `logroot`.<br /> +# One of the parameters that determines how to send `mod_security` audit +# log ([SecAuditLog](https://github.com/SpiderLabs/ModSecurity/wiki/Reference-Manual#SecAuditLog)). +# If none of those parameters are set, the global audit log is used +# (`/var/log/httpd/modsec\_audit.log`; Debian and derivatives: `/var/log/apache2/modsec\_audit.log`; others: ). +# +# @param modsec_audit_log_pipe +# If `modsec_audit_log_pipe` is set, it should start with a pipe. Example +# `|/path/to/mlogc /path/to/mlogc.conf`.<br /> +# One of the parameters that determines how to send `mod_security` audit +# log ([SecAuditLog](https://github.com/SpiderLabs/ModSecurity/wiki/Reference-Manual#SecAuditLog)). +# If none of those parameters are set, the global audit log is used +# (`/var/log/httpd/modsec\_audit.log`; Debian and derivatives: `/var/log/apache2/modsec\_audit.log`; others: ). +# +# @param modsec_audit_log +# If `modsec_audit_log` is `true`, given a virtual host ---for instance, example.com--- it +# defaults to `example.com\_security\_ssl.log` for SSL-encrypted virtual hosts +# and `example.com\_security.log` for unencrypted virtual hosts.<br /> +# One of the parameters that determines how to send `mod_security` audit +# log ([SecAuditLog](https://github.com/SpiderLabs/ModSecurity/wiki/Reference-Manual#SecAuditLog)).<br /> +# If none of those parameters are set, the global audit log is used +# (`/var/log/httpd/modsec\_audit.log`; Debian and derivatives: `/var/log/apache2/modsec\_audit.log`; others: ). +# +# @param no_proxy_uris +# Specifies URLs you do not want to proxy. This parameter is meant to be used in combination +# with [`proxy_dest`](#proxy_dest). +# +# @param no_proxy_uris_match +# This directive is equivalent to `no_proxy_uris`, but takes regular expressions. +# +# @param proxy_preserve_host +# Sets the [ProxyPreserveHost Directive](https://httpd.apache.org/docs/current/mod/mod_proxy.html#proxypreservehost).<br /> +# Setting this parameter to `true` enables the `Host:` line from an incoming request to be +# proxied to the host instead of hostname. Setting it to `false` sets this directive to 'Off'. +# +# @param proxy_add_headers +# Sets the [ProxyAddHeaders Directive](https://httpd.apache.org/docs/current/mod/mod_proxy.html#proxyaddheaders).<br /> +# This parameter controlls whether proxy-related HTTP headers (X-Forwarded-For, +# X-Forwarded-Host and X-Forwarded-Server) get sent to the backend server. +# +# @param proxy_error_override +# Sets the [ProxyErrorOverride Directive](https://httpd.apache.org/docs/current/mod/mod_proxy.html#proxyerroroverride). +# This directive controls whether Apache should override error pages for proxied content. +# +# @param options +# Sets the `Options` for the specified virtual host. For example: +# ``` puppet +# apache::vhost { 'site.name.fdqn': +# … +# options => ['Indexes','FollowSymLinks','MultiViews'], +# } +# ``` +# > **Note**: If you use the `directories` parameter of `apache::vhost`, 'Options', +# 'Override', and 'DirectoryIndex' are ignored because they are parameters within `directories`. +# +# @param override +# Sets the overrides for the specified virtual host. Accepts an array of +# [AllowOverride](https://httpd.apache.org/docs/current/mod/core.html#allowoverride) arguments. +# +# @param passenger_enabled +# Sets the value for the [PassengerEnabled](http://www.modrails.com/documentation/Users%20guide%20Apache.html#PassengerEnabled) +# directive to `on` or `off`. Requires `apache::mod::passenger` to be included. +# ``` puppet +# apache::vhost { 'sample.example.net': +# docroot => '/path/to/directory', +# directories => [ +# { path => '/path/to/directory', +# passenger_enabled => 'on', +# }, +# ], +# } +# ``` +# > **Note:** There is an [issue](http://www.conandalton.net/2010/06/passengerenabled-off-not-working.html) +# using the PassengerEnabled directive with the PassengerHighPerformance directive. +# +# @param passenger_base_uri +# Sets [PassengerBaseURI](https://www.phusionpassenger.com/library/config/apache/reference/#passengerbase_rui), +# to specify that the given URI is a distinct application served by Passenger. +# +# @param passenger_ruby +# Sets [PassengerRuby](https://www.phusionpassenger.com/library/config/apache/reference/#passengerruby), +# specifying the Ruby interpreter to use when serving the relevant web applications. +# +# @param passenger_python +# Sets [PassengerPython](https://www.phusionpassenger.com/library/config/apache/reference/#passengerpython), +# specifying the Python interpreter to use when serving the relevant web applications. +# +# @param passenger_nodejs +# Sets the [`PassengerNodejs`](https://www.phusionpassenger.com/library/config/apache/reference/#passengernodejs), +# specifying Node.js command to use when serving the relevant web applications. +# +# @param passenger_meteor_app_settings +# Sets [PassengerMeteorAppSettings](https://www.phusionpassenger.com/library/config/apache/reference/#passengermeteorappsettings), +# specifying a JSON file with settings for the application when using a Meteor +# application in non-bundled mode. +# +# @param passenger_app_env +# Sets [PassengerAppEnv](https://www.phusionpassenger.com/library/config/apache/reference/#passengerappenv), +# the environment for the Passenger application. If not specified, defaults to the global +# setting or 'production'. +# +# @param passenger_app_root +# Sets [PassengerRoot](https://www.phusionpassenger.com/library/config/apache/reference/#passengerapproot), +# the location of the Passenger application root if different from the DocumentRoot. +# +# @param passenger_app_group_name +# Sets [PassengerAppGroupName](https://www.phusionpassenger.com/library/config/apache/reference/#passengerappgroupname), +# the name of the application group that the current application should belong to. +# +# @param passenger_app_type +# Sets [PassengerAppType](https://www.phusionpassenger.com/library/config/apache/reference/#passengerapptype), +# to force Passenger to recognize the application as a specific type. +# +# @param passenger_startup_file +# Sets the [PassengerStartupFile](https://www.phusionpassenger.com/library/config/apache/reference/#passengerstartupfile) +# path. This path is relative to the application root. +# +# @param passenger_restart_dir +# Sets the [PassengerRestartDir](https://www.phusionpassenger.com/library/config/apache/reference/#passengerrestartdir) +# to customize the directory in which `restart.txt` is searched for. +# +# @param passenger_spawn_method +# Sets [PassengerSpawnMethod](https://www.phusionpassenger.com/library/config/apache/reference/#passengerspawnmethod), +# whether Passenger spawns applications directly, or using a prefork copy-on-write mechanism. +# +# @param passenger_load_shell_envvars +# Sets [PassengerLoadShellEnvvars](https://www.phusionpassenger.com/library/config/apache/reference/#passengerloadshellenvvars), +# to enable or disable the loading of shell environment variables before spawning the application. +# +# @param passenger_rolling_restarts +# Sets [PassengerRollingRestarts](https://www.phusionpassenger.com/library/config/apache/reference/#passengerrollingrestarts), +# to enable or disable support for zero-downtime application restarts through `restart.txt`. +# +# @param passenger_resist_deployment_errors +# Sets [PassengerResistDeploymentErrors](https://www.phusionpassenger.com/library/config/apache/reference/#passengerresistdeploymenterrors), +# to enable or disable resistance against deployment errors. +# +# @param passenger_user +# Sets [PassengerUser](https://www.phusionpassenger.com/library/config/apache/reference/#passengeruser), +# the running user for sandboxing applications. +# +# @param passenger_group +# Sets [PassengerGroup](https://www.phusionpassenger.com/library/config/apache/reference/#passengergroup), +# the running group for sandboxing applications. +# +# @param passenger_friendly_error_pages +# Sets [PassengerFriendlyErrorPages](https://www.phusionpassenger.com/library/config/apache/reference/#passengerfriendlyerrorpages), +# which can display friendly error pages whenever an application fails to start. This +# friendly error page presents the startup error message, some suggestions for solving +# the problem, a backtrace and a dump of the environment variables. +# +# @param passenger_min_instances +# Sets [PassengerMinInstances](https://www.phusionpassenger.com/library/config/apache/reference/#passengermininstances), +# the minimum number of application processes to run. +# +# @param passenger_max_instances +# Sets [PassengerMaxInstances](https://www.phusionpassenger.com/library/config/apache/reference/#passengermaxinstances), +# the maximum number of application processes to run. +# +# @param passenger_max_preloader_idle_time +# Sets [PassengerMaxPreloaderIdleTime](https://www.phusionpassenger.com/library/config/apache/reference/#passengermaxpreloaderidletime), +# the maximum amount of time the preloader waits before shutting down an idle process. +# +# @param passenger_force_max_concurrent_requests_per_process +# Sets [PassengerForceMaxConcurrentRequestsPerProcess](https://www.phusionpassenger.com/library/config/apache/reference/#passengerforcemaxconcurrentrequestsperprocess), +# the maximum amount of concurrent requests the application can handle per process. +# +# @param passenger_start_timeout +# Sets [PassengerStartTimeout](https://www.phusionpassenger.com/library/config/apache/reference/#passengerstarttimeout), +# the timeout for the application startup. +# +# @param passenger_concurrency_model +# Sets [PassengerConcurrencyModel](https://www.phusionpassenger.com/library/config/apache/reference/#passengerconcurrencyodel), +# to specify the I/O concurrency model that should be used for Ruby application processes. +# Passenger supports two concurrency models:<br /> +# * `process` – single-threaded, multi-processed I/O concurrency. +# * `thread` – multi-threaded, multi-processed I/O concurrency. +# +# @param passenger_thread_count +# Sets [PassengerThreadCount](https://www.phusionpassenger.com/library/config/apache/reference/#passengerthreadcount), +# the number of threads that Passenger should spawn per Ruby application process.<br /> +# This option only has effect if PassengerConcurrencyModel is `thread`. +# +# @param passenger_max_requests +# Sets [PassengerMaxRequests](https://www.phusionpassenger.com/library/config/apache/reference/#passengermaxrequests), +# the maximum number of requests an application process will process. +# +# @param passenger_max_request_time +# Sets [PassengerMaxRequestTime](https://www.phusionpassenger.com/library/config/apache/reference/#passengermaxrequesttime), +# the maximum amount of time, in seconds, that an application process may take to +# process a request. +# +# @param passenger_memory_limit +# Sets [PassengerMemoryLimit](https://www.phusionpassenger.com/library/config/apache/reference/#passengermemorylimit), +# the maximum amount of memory that an application process may use, in megabytes. +# +# @param passenger_stat_throttle_rate +# Sets [PassengerStatThrottleRate](https://www.phusionpassenger.com/library/config/apache/reference/#passengerstatthrottlerate), +# to set a limit, in seconds, on how often Passenger will perform it's filesystem checks. +# +# @param passenger_pre_start +# Sets [PassengerPreStart](https://www.phusionpassenger.com/library/config/apache/reference/#passengerprestart), +# the URL of the application if pre-starting is required. +# +# @param passenger_high_performance +# Sets [PassengerHighPerformance](https://www.phusionpassenger.com/library/config/apache/reference/#passengerhighperformance), +# to enhance performance in return for reduced compatibility. +# +# @param passenger_buffer_upload +# Sets [PassengerBufferUpload](https://www.phusionpassenger.com/library/config/apache/reference/#passengerbufferupload), +# to buffer HTTP client request bodies before they are sent to the application. +# +# @param passenger_buffer_response +# Sets [PassengerBufferResponse](https://www.phusionpassenger.com/library/config/apache/reference/#passengerbufferresponse), +# to buffer Happlication-generated responses. +# +# @param passenger_error_override +# Sets [PassengerErrorOverride](https://www.phusionpassenger.com/library/config/apache/reference/#passengererroroverride), +# to specify whether Apache will intercept and handle response with HTTP status codes of +# 400 and higher. +# +# @param passenger_max_request_queue_size +# Sets [PassengerMaxRequestQueueSize](https://www.phusionpassenger.com/library/config/apache/reference/#passengermaxrequestqueuesize), +# to specify the maximum amount of requests that are allowed to queue whenever the maximum +# concurrent request limit is reached. If the queue is already at this specified limit, then +# Passenger immediately sends a "503 Service Unavailable" error to any incoming requests.<br /> +# A value of 0 means that the queue size is unbounded. +# +# @param passenger_max_request_queue_time +# Sets [PassengerMaxRequestQueueTime](https://www.phusionpassenger.com/library/config/apache/reference/#passengermaxrequestqueuetime), +# to specify the maximum amount of time that requests are allowed to stay in the queue +# whenever the maximum concurrent request limit is reached. If a request reaches this specified +# limit, then Passenger immeaditly sends a "504 Gateway Timeout" error for that request.<br /> +# A value of 0 means that the queue time is unbounded. +# +# @param passenger_sticky_sessions +# Sets [PassengerStickySessions](https://www.phusionpassenger.com/library/config/apache/reference/#passengerstickysessions), +# to specify that, whenever possible, all requests sent by a client will be routed to the same +# originating application process. +# +# @param passenger_sticky_sessions_cookie_name +# Sets [PassengerStickySessionsCookieName](https://www.phusionpassenger.com/library/config/apache/reference/#passengerstickysessionscookiename), +# to specify the name of the sticky sessions cookie. +# +# @param passenger_allow_encoded_slashes +# Sets [PassengerAllowEncodedSlashes](https://www.phusionpassenger.com/library/config/apache/reference/#passengerallowencodedslashes), +# to allow URLs with encoded slashes. Please note that this feature will not work properly +# unless Apache's `AllowEncodedSlashes` is also enabled. +# +# @param passenger_debugger +# Sets [PassengerDebugger](https://www.phusionpassenger.com/library/config/apache/reference/#passengerdebugger), +# to turn support for Ruby application debugging on or off. +# +# @param passenger_lve_min_uid +# Sets [PassengerLveMinUid](https://www.phusionpassenger.com/library/config/apache/reference/#passengerlveminuid), +# to only allow the spawning of application processes with UIDs equal to, or higher than, this +# specified value on LVE-enabled kernels. +# +# @param php_values +# Allows per-virtual host setting [`php_value`s](http://php.net/manual/en/configuration.changes.php). +# These flags or values can be overwritten by a user or an application. +# Within a vhost declaration: +# ``` puppet +# php_values => [ 'include_path ".:/usr/local/example-app/include"' ], +# ``` +# +# @param php_flags +# Allows per-virtual host setting [`php_flags\``](http://php.net/manual/en/configuration.changes.php). +# These flags or values can be overwritten by a user or an application. +# +# @param php_admin_values +# Allows per-virtual host setting [`php_admin_value`](http://php.net/manual/en/configuration.changes.php). +# These flags or values cannot be overwritten by a user or an application. +# +# @param php_admin_flags +# Allows per-virtual host setting [`php_admin_flag`](http://php.net/manual/en/configuration.changes.php). +# These flags or values cannot be overwritten by a user or an application. +# +# @param port +# Sets the port the host is configured on. The module's defaults ensure the host listens +# on port 80 for non-SSL virtual hosts and port 443 for SSL virtual hosts. The host only +# listens on the port set in this parameter. +# +# @param priority +# Sets the relative load-order for Apache HTTPD VirtualHost configuration files.<br /> +# If nothing matches the priority, the first name-based virtual host is used. Likewise, +# passing a higher priority causes the alphabetically first name-based virtual host to be +# used if no other names match.<br /> +# > **Note:** You should not need to use this parameter. However, if you do use it, be +# aware that the `default_vhost` parameter for `apache::vhost` passes a priority of '15'.<br /> +# To omit the priority prefix in file names, pass a priority of `false`. +# +# @param protocols +# Sets the [Protocols](https://httpd.apache.org/docs/current/en/mod/core.html#protocols) +# directive, which lists available protocols for the virutal host. +# +# @param protocols_honor_order +# Sets the [ProtocolsHonorOrder](https://httpd.apache.org/docs/current/en/mod/core.html#protocolshonororder) +# directive which determines wether the order of Protocols sets precedence during negotiation. +# +# @param proxy_dest +# Specifies the destination address of a [ProxyPass](https://httpd.apache.org/docs/current/mod/mod_proxy.html#proxypass) configuration. +# +# @param proxy_pass +# Specifies an array of `path => URI` values for a [ProxyPass](https://httpd.apache.org/docs/current/mod/mod_proxy.html#proxypass) +# configuration. Optionally, parameters can be added as an array. +# ``` puppet +# apache::vhost { 'site.name.fdqn': +# … +# proxy_pass => [ +# { 'path' => '/a', 'url' => 'http://backend-a/' }, +# { 'path' => '/b', 'url' => 'http://backend-b/' }, +# { 'path' => '/c', 'url' => 'http://backend-a/c', 'params' => {'max'=>20, 'ttl'=>120, 'retry'=>300}}, +# { 'path' => '/l', 'url' => 'http://backend-xy', +# 'reverse_urls' => ['http://backend-x', 'http://backend-y'] }, +# { 'path' => '/d', 'url' => 'http://backend-a/d', +# 'params' => { 'retry' => '0', 'timeout' => '5' }, }, +# { 'path' => '/e', 'url' => 'http://backend-a/e', +# 'keywords' => ['nocanon', 'interpolate'] }, +# { 'path' => '/f', 'url' => 'http://backend-f/', +# 'setenv' => ['proxy-nokeepalive 1','force-proxy-request-1.0 1']}, +# { 'path' => '/g', 'url' => 'http://backend-g/', +# 'reverse_cookies' => [{'path' => '/g', 'url' => 'http://backend-g/',}, {'domain' => 'http://backend-g', 'url' => 'http:://backend-g',},], }, +# { 'path' => '/h', 'url' => 'http://backend-h/h', +# 'no_proxy_uris' => ['/h/admin', '/h/server-status'] }, +# ], +# } +# ``` +# * `reverse_urls`. *Optional.* This setting is useful when used with `mod_proxy_balancer`. Values: an array or string. +# * `reverse_cookies`. *Optional.* Sets `ProxyPassReverseCookiePath` and `ProxyPassReverseCookieDomain`. +# * `params`. *Optional.* Allows for ProxyPass key-value parameters, such as connection settings. +# * `setenv`. *Optional.* Sets [environment variables](https://httpd.apache.org/docs/current/mod/mod_proxy.html#envsettings) for the proxy directive. Values: array. +# +# @param proxy_dest_match +# This directive is equivalent to `proxy_dest`, but takes regular expressions, see +# [ProxyPassMatch](https://httpd.apache.org/docs/current/mod/mod_proxy.html#proxypassmatch) +# for details. +# +# @param proxy_dest_reverse_match +# Allows you to pass a ProxyPassReverse if `proxy_dest_match` is specified. See +# [ProxyPassReverse](https://httpd.apache.org/docs/current/mod/mod_proxy.html#proxypassreverse) +# for details. +# +# @param proxy_pass_match +# This directive is equivalent to `proxy_pass`, but takes regular expressions, see +# [ProxyPassMatch](https://httpd.apache.org/docs/current/mod/mod_proxy.html#proxypassmatch) +# for details. +# +# @param redirect_dest +# Specifies the address to redirect to. +# +# @param redirect_source +# Specifies the source URIs that redirect to the destination specified in `redirect_dest`. +# If more than one item for redirect is supplied, the source and destination must be the same +# length, and the items are order-dependent. +# ``` puppet +# apache::vhost { 'site.name.fdqn': +# … +# redirect_source => ['/images','/downloads'], +# redirect_dest => ['http://img.example.com/','http://downloads.example.com/'], +# } +# ``` +# +# @param redirect_status +# Specifies the status to append to the redirect. +# ``` puppet +# apache::vhost { 'site.name.fdqn': +# … +# redirect_status => ['temp','permanent'], +# } +# ``` +# +# @param redirectmatch_regexp +# Determines which server status should be raised for a given regular expression +# and where to forward the user to. Entered as an array alongside redirectmatch_status +# and redirectmatch_dest. +# ``` puppet +# apache::vhost { 'site.name.fdqn': +# … +# redirectmatch_status => ['404','404'], +# redirectmatch_regexp => ['\.git(/.*|$)/','\.svn(/.*|$)'], +# redirectmatch_dest => ['http://www.example.com/$1','http://www.example.com/$2'], +# } +# ``` +# +# @param redirectmatch_status +# Determines which server status should be raised for a given regular expression +# and where to forward the user to. Entered as an array alongside redirectmatch_regexp +# and redirectmatch_dest. +# ``` puppet +# apache::vhost { 'site.name.fdqn': +# … +# redirectmatch_status => ['404','404'], +# redirectmatch_regexp => ['\.git(/.*|$)/','\.svn(/.*|$)'], +# redirectmatch_dest => ['http://www.example.com/$1','http://www.example.com/$2'], +# } +# ``` +# +# @param redirectmatch_dest +# Determines which server status should be raised for a given regular expression +# and where to forward the user to. Entered as an array alongside redirectmatch_status +# and redirectmatch_regexp. +# ``` puppet +# apache::vhost { 'site.name.fdqn': +# … +# redirectmatch_status => ['404','404'], +# redirectmatch_regexp => ['\.git(/.*|$)/','\.svn(/.*|$)'], +# redirectmatch_dest => ['http://www.example.com/$1','http://www.example.com/$2'], +# } +# ``` +# +# @param request_headers +# Modifies collected [request headers](https://httpd.apache.org/docs/current/mod/mod_headers.html#requestheader) +# in various ways, including adding additional request headers, removing request headers, +# and so on. +# ``` puppet +# apache::vhost { 'site.name.fdqn': +# … +# request_headers => [ +# 'append MirrorID "mirror 12"', +# 'unset MirrorID', +# ], +# } +# ``` +# +# @param rewrites +# Creates URL rewrite rules. Expects an array of hashes.<br /> +# Valid Hash keys include `comment`, `rewrite_base`, `rewrite_cond`, `rewrite_rule` +# or `rewrite_map`.<br /> +# For example, you can specify that anyone trying to access index.html is served welcome.html +# ``` puppet +# apache::vhost { 'site.name.fdqn': +# … +# rewrites => [ { rewrite_rule => ['^index\.html$ welcome.html'] } ] +# } +# ``` +# The parameter allows rewrite conditions that, when `true`, execute the associated rule. +# For instance, if you wanted to rewrite URLs only if the visitor is using IE +# ``` puppet +# apache::vhost { 'site.name.fdqn': +# … +# rewrites => [ +# { +# comment => 'redirect IE', +# rewrite_cond => ['%{HTTP_USER_AGENT} ^MSIE'], +# rewrite_rule => ['^index\.html$ welcome.html'], +# }, +# ], +# } +# ``` +# You can also apply multiple conditions. For instance, rewrite index.html to welcome.html +# only when the browser is Lynx or Mozilla (version 1 or 2) +# ``` puppet +# apache::vhost { 'site.name.fdqn': +# … +# rewrites => [ +# { +# comment => 'Lynx or Mozilla v1/2', +# rewrite_cond => ['%{HTTP_USER_AGENT} ^Lynx/ [OR]', '%{HTTP_USER_AGENT} ^Mozilla/[12]'], +# rewrite_rule => ['^index\.html$ welcome.html'], +# }, +# ], +# } +# ``` +# Multiple rewrites and conditions are also possible +# ``` puppet +# apache::vhost { 'site.name.fdqn': +# … +# rewrites => [ +# { +# comment => 'Lynx or Mozilla v1/2', +# rewrite_cond => ['%{HTTP_USER_AGENT} ^Lynx/ [OR]', '%{HTTP_USER_AGENT} ^Mozilla/[12]'], +# rewrite_rule => ['^index\.html$ welcome.html'], +# }, +# { +# comment => 'Internet Explorer', +# rewrite_cond => ['%{HTTP_USER_AGENT} ^MSIE'], +# rewrite_rule => ['^index\.html$ /index.IE.html [L]'], +# }, +# { +# rewrite_base => /apps/, +# rewrite_rule => ['^index\.cgi$ index.php', '^index\.html$ index.php', '^index\.asp$ index.html'], +# }, +# { comment => 'Rewrite to lower case', +# rewrite_cond => ['%{REQUEST_URI} [A-Z]'], +# rewrite_map => ['lc int:tolower'], +# rewrite_rule => ['(.*) ${lc:$1} [R=301,L]'], +# }, +# ], +# } +# ``` +# Refer to the [`mod_rewrite` documentation](https://httpd.apache.org/docs/2.4/mod/mod_rewrite.html) +# for more details on what is possible with rewrite rules and conditions.<br /> +# > **Note**: If you include rewrites in your directories, also include `apache::mod::rewrite` +# and consider setting the rewrites using the `rewrites` parameter in `apache::vhost` rather +# than setting the rewrites in the virtual host's directories. +# +# @param rewrite_base +# The parameter [`rewrite_base`](https://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewritebase) +# specifies the URL prefix to be used for per-directory (htaccess) RewriteRule directives +# that substitue a relative path. +# +# @param rewrite_rule +# The parameter [`rewrite_rile`](https://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewriterule) +# allows the user to define the rules that will be used by the rewrite engine. +# +# @param rewrite_cond +# The parameter [`rewrite_cond`](https://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewritecond) +# defines a rule condition, that when satisfied will implement that rule within the +# rewrite engine. +# +# @param rewrite_inherit +# Determines whether the virtual host inherits global rewrite rules.<br /> +# Rewrite rules may be specified globally (in `$conf_file` or `$confd_dir`) or +# inside the virtual host `.conf` file. By default, virtual hosts do not inherit +# global settings. To activate inheritance, specify the `rewrites` parameter and set +# `rewrite_inherit` parameter to `true`: +# ``` puppet +# apache::vhost { 'site.name.fdqn': +# … +# rewrites => [ +# <rules>, +# ], +# rewrite_inherit => `true`, +# } +# ``` +# > **Note**: The `rewrites` parameter is **required** for this to have effect<br /> +# Apache activates global `Rewrite` rules inheritance if the virtual host files contains +# the following directives: +# ``` ApacheConf +# RewriteEngine On +# RewriteOptions Inherit +# ``` +# Refer to the official [`mod_rewrite`](https://httpd.apache.org/docs/2.2/mod/mod_rewrite.html) +# documentation, section "Rewriting in Virtual Hosts". +# +# @param scriptalias +# Defines a directory of CGI scripts to be aliased to the path '/cgi-bin', such as +# '/usr/scripts'. +# +# @param scriptaliases +# > **Note**: This parameter is deprecated in favor of the `aliases` parameter.<br /> +# Passes an array of hashes to the virtual host to create either ScriptAlias or +# ScriptAliasMatch statements per the `mod_alias` documentation. +# ``` puppet +# scriptaliases => [ +# { +# alias => '/myscript', +# path => '/usr/share/myscript', +# }, +# { +# aliasmatch => '^/foo(.*)', +# path => '/usr/share/fooscripts$1', +# }, +# { +# aliasmatch => '^/bar/(.*)', +# path => '/usr/share/bar/wrapper.sh/$1', +# }, +# { +# alias => '/neatscript', +# path => '/usr/share/neatscript', +# }, +# ] +# ``` +# The ScriptAlias and ScriptAliasMatch directives are created in the order specified. +# As with [Alias and AliasMatch](#aliases) directives, specify more specific aliases +# before more general ones to avoid shadowing. +# +# @param serveradmin +# Specifies the email address Apache displays when it renders one of its error pages. +# +# @param serveraliases +# Sets the [ServerAliases](https://httpd.apache.org/docs/current/mod/core.html#serveralias) +# of the site. +# +# @param servername +# Sets the servername corresponding to the hostname you connect to the virtual host at. +# +# @param setenv +# Used by HTTPD to set environment variables for virtual hosts.<br /> +# Example: +# ``` puppet +# apache::vhost { 'setenv.example.com': +# setenv => ['SPECIAL_PATH /foo/bin'], +# } +# ``` +# +# @param setenvif +# Used by HTTPD to conditionally set environment variables for virtual hosts. +# +# @param setenvifnocase +# Used by HTTPD to conditionally set environment variables for virtual hosts (caseless matching). +# +# @param suexec_user_group +# Allows the spcification of user and group execution privileges for CGI programs through +# inclusion of the `mod_suexec` module. +# +# @param suphp_addhandler +# Sets up a virtual host with [suPHP](http://suphp.org/DocumentationView.html?file=apache/CONFIG) +# working together with suphp_configpath and suphp_engine.<br /> +# An example virtual host configuration with suPHP: +# ``` puppet +# apache::vhost { 'suphp.example.com': +# port => '80', +# docroot => '/home/appuser/myphpapp', +# suphp_addhandler => 'x-httpd-php', +# suphp_engine => 'on', +# suphp_configpath => '/etc/php5/apache2', +# directories => { path => '/home/appuser/myphpapp', +# 'suphp' => { user => 'myappuser', group => 'myappgroup' }, +# } +# } +# ``` +# +# @param suphp_configpath +# Sets up a virtual host with [suPHP](http://suphp.org/DocumentationView.html?file=apache/CONFIG) +# working together with suphp_addhandler and suphp_engine.<br /> +# An example virtual host configuration with suPHP: +# ``` puppet +# apache::vhost { 'suphp.example.com': +# port => '80', +# docroot => '/home/appuser/myphpapp', +# suphp_addhandler => 'x-httpd-php', +# suphp_engine => 'on', +# suphp_configpath => '/etc/php5/apache2', +# directories => { path => '/home/appuser/myphpapp', +# 'suphp' => { user => 'myappuser', group => 'myappgroup' }, +# } +# } +# ``` +# +# @param suphp_engine +# Sets up a virtual host with [suPHP](http://suphp.org/DocumentationView.html?file=apache/CONFIG) +# working together with suphp_configpath and suphp_addhandler.<br /> +# An example virtual host configuration with suPHP: +# ``` puppet +# apache::vhost { 'suphp.example.com': +# port => '80', +# docroot => '/home/appuser/myphpapp', +# suphp_addhandler => 'x-httpd-php', +# suphp_engine => 'on', +# suphp_configpath => '/etc/php5/apache2', +# directories => { path => '/home/appuser/myphpapp', +# 'suphp' => { user => 'myappuser', group => 'myappgroup' }, +# } +# } +# ``` +# +# @param vhost_name +# Enables name-based virtual hosting. If no IP is passed to the virtual host, but the +# virtual host is assigned a port, then the virtual host name is `vhost_name:port`. +# If the virtual host has no assigned IP or port, the virtual host name is set to the +# title of the resource. +# +# @param virtual_docroot +# Sets up a virtual host with a wildcard alias subdomain mapped to a directory with the +# same name. For example, `http://example.com` would map to `/var/www/example.com`. +# ``` puppet +# apache::vhost { 'subdomain.loc': +# vhost_name => '*', +# port => '80', +# virtual_docroot => '/var/www/%-2+', +# docroot => '/var/www', +# serveraliases => ['*.loc',], +# } +# ``` +# +# @param wsgi_daemon_process +# Sets up a virtual host with [WSGI](https://github.com/GrahamDumpleton/mod_wsgi) alongside +# wsgi_daemon_process_options, wsgi_process_group, +# wsgi_script_aliases and wsgi_pass_authorization.<br /> +# A hash that sets the name of the WSGI daemon, accepting +# [certain keys](http://modwsgi.readthedocs.org/en/latest/configuration-directives/WSGIDaemonProcess.html).<br /> +# An example virtual host configuration with WSGI: +# ``` puppet +# apache::vhost { 'wsgi.example.com': +# port => '80', +# docroot => '/var/www/pythonapp', +# wsgi_daemon_process => 'wsgi', +# wsgi_daemon_process_options => +# { processes => '2', +# threads => '15', +# display-name => '%{GROUP}', +# }, +# wsgi_process_group => 'wsgi', +# wsgi_script_aliases => { '/' => '/var/www/demo.wsgi' }, +# wsgi_chunked_request => 'On', +# } +# ``` +# +# @param wsgi_daemon_process_options +# Sets up a virtual host with [WSGI](https://github.com/GrahamDumpleton/mod_wsgi) alongside +# wsgi_daemon_process, wsgi_process_group, +# wsgi_script_aliases and wsgi_pass_authorization.<br /> +# Sets the group ID that the virtual host runs under. +# +# @param wsgi_application_group +# Sets up a virtual host with [WSGI](https://github.com/GrahamDumpleton/mod_wsgi) alongside +# wsgi_daemon_process, wsgi_daemon_process_options, wsgi_process_group, +# and wsgi_pass_authorization.<br /> +# This parameter defines the [`WSGIApplicationGroup directive`](https://modwsgi.readthedocs.io/en/develop/configuration-directives/WSGIApplicationGroup.html), +# thus allowing you to specify which application group the WSGI application belongs to, +# with all WSGI applications within the same group executing within the context of the +# same Python sub interpreter. +# +# @param wsgi_import_script +# Sets up a virtual host with [WSGI](https://github.com/GrahamDumpleton/mod_wsgi) alongside +# wsgi_daemon_process, wsgi_daemon_process_options, wsgi_process_group, +# and wsgi_pass_authorization.<br /> +# This parameter defines the [`WSGIImportScript directive`](https://modwsgi.readthedocs.io/en/develop/configuration-directives/WSGIImportScript.html), +# which can be used in order to specify a script file to be loaded upon a process starting. +# +# @param wsgi_import_script_options +# Sets up a virtual host with [WSGI](https://github.com/GrahamDumpleton/mod_wsgi) alongside +# wsgi_daemon_process, wsgi_daemon_process_options, wsgi_process_group, +# and wsgi_pass_authorization.<br /> +# This parameter defines the [`WSGIImportScript directive`](https://modwsgi.readthedocs.io/en/develop/configuration-directives/WSGIImportScript.html), +# which can be used in order to specify a script file to be loaded upon a process starting.<br /> +# Specifies the process and aplication groups of the script. +# +# @param wsgi_chunked_request +# Sets up a virtual host with [WSGI](https://github.com/GrahamDumpleton/mod_wsgi) alongside +# wsgi_daemon_process, wsgi_daemon_process_options, wsgi_process_group, +# and wsgi_pass_authorization.<br /> +# This parameter defines the [`WSGIChunkedRequest directive`](https://modwsgi.readthedocs.io/en/develop/configuration-directives/WSGIChunkedRequest.html), +# allowing you to enable support for chunked request content.<br /> +# WSGI is technically incapable of supporting chunked request content without all chunked +# request content having first been read in and buffered. +# +# @param wsgi_process_group +# Sets up a virtual host with [WSGI](https://github.com/GrahamDumpleton/mod_wsgi) alongside +# wsgi_daemon_process, wsgi_daemon_process_options, +# wsgi_script_aliases and wsgi_pass_authorization.<br /> +# Requires a hash of web paths to filesystem `.wsgi paths/`. +# +# @param wsgi_script_aliases +# Sets up a virtual host with [WSGI](https://github.com/GrahamDumpleton/mod_wsgi) alongside +# wsgi_daemon_process, wsgi_daemon_process_options, wsgi_process_group, +# and wsgi_pass_authorization.<br /> +# Uses the WSGI application to handle authorization instead of Apache when set to `On`.<br /> +# For more information, see mod_wsgi's [WSGIPassAuthorization documentation](https://modwsgi.readthedocs.org/en/latest/configuration-directives/WSGIPassAuthorization.html). +# +# @param wsgi_script_aliases_match +# Sets up a virtual host with [WSGI](https://github.com/GrahamDumpleton/mod_wsgi) alongside +# wsgi_daemon_process, wsgi_daemon_process_options, wsgi_process_group, +# and wsgi_pass_authorization.<br /> +# Uses the WSGI application to handle authorization instead of Apache when set to `On`.<br /> +# This directive is similar to `wsgi_script_aliases`, but makes use of regular expressions +# in place of simple prefix matching.<br /> +# For more information, see mod_wsgi's [WSGIPassAuthorization documentation](https://modwsgi.readthedocs.org/en/latest/configuration-directives/WSGIPassAuthorization.html). +# +# @param wsgi_pass_authorization +# Sets up a virtual host with [WSGI](https://github.com/GrahamDumpleton/mod_wsgi) alongside +# wsgi_daemon_process, wsgi_daemon_process_options, wsgi_process_group and +# wsgi_script_aliases.<br /> +# Enables support for chunked requests. +# +# @param directories +# The `directories` parameter within the `apache::vhost` class passes an array of hashes +# to the virtual host to create [Directory](https://httpd.apache.org/docs/current/mod/core.html#directory), +# [File](https://httpd.apache.org/docs/current/mod/core.html#files), and +# [Location](https://httpd.apache.org/docs/current/mod/core.html#location) directive blocks. +# These blocks take the form, `< Directory /path/to/directory>...< /Directory>`.<br /> +# The `path` key sets the path for the directory, files, and location blocks. Its value +# must be a path for the `directory`, `files`, and `location` providers, or a regex for +# the `directorymatch`, `filesmatch`, or `locationmatch` providers. Each hash passed to +# `directories` **must** contain `path` as one of the keys.<br /> +# The `provider` key is optional. If missing, this key defaults to `directory`. +# Values: `directory`, `files`, `proxy`, `location`, `directorymatch`, `filesmatch`, +# `proxymatch` or `locationmatch`. If you set `provider` to `directorymatch`, it +# uses the keyword `DirectoryMatch` in the Apache config file.<br /> +# An example use of `directories`: +# ``` puppet +# apache::vhost { 'files.example.net': +# docroot => '/var/www/files', +# directories => [ +# { 'path' => '/var/www/files', +# 'provider' => 'files', +# 'deny' => 'from all', +# }, +# ], +# } +# ``` +# > **Note:** At least one directory should match the `docroot` parameter. After you +# start declaring directories, `apache::vhost` assumes that all required Directory blocks +# will be declared. If not defined, a single default Directory block is created that matches +# the `docroot` parameter.<br /> +# Available handlers, represented as keys, should be placed within the `directory`, +# `files`, or `location` hashes. This looks like +# ``` puppet +# apache::vhost { 'sample.example.net': +# docroot => '/path/to/directory', +# directories => [ { path => '/path/to/directory', handler => value } ], +# } +# ``` +# Any handlers you do not set in these hashes are considered `undefined` within Puppet and +# are not added to the virtual host, resulting in the module using their default values. +# +# @param custom_fragment +# Pass a string of custom configuration directives to be placed at the end of the directory +# configuration. +# ``` puppet +# apache::vhost { 'monitor': +# … +# directories => [ +# { +# path => '/path/to/directory', +# custom_fragment => ' +# <Location /balancer-manager> +# SetHandler balancer-manager +# Order allow,deny +# Allow from all +# </Location> +# <Location /server-status> +# SetHandler server-status +# Order allow,deny +# Allow from all +# </Location> +# ProxyStatus On', +# }, +# ] +# } +# ``` +# +# @param error_documents +# An array of hashes used to override the [ErrorDocument](https://httpd.apache.org/docs/current/mod/core.html#errordocument) +# settings for the directory. +# ``` puppet +# apache::vhost { 'sample.example.net': +# directories => [ +# { path => '/srv/www', +# error_documents => [ +# { 'error_code' => '503', +# 'document' => '/service-unavail', +# }, +# ], +# }, +# ], +# } +# ``` +# +# @param h2_copy_files +# Sets the [H2CopyFiles](https://httpd.apache.org/docs/current/mod/mod_http2.html#h2copyfiles) directive.<br /> +# Note that you must declare `class {'apache::mod::http2': }` before using this directive. +# +# @param h2_push_resource +# Sets the [H2PushResource](https://httpd.apache.org/docs/current/mod/mod_http2.html#h2pushresource) directive.<br /> +# Note that you must declare `class {'apache::mod::http2': }` before using this directive. +# +# @param headers +# Adds lines for [Header](https://httpd.apache.org/docs/current/mod/mod_headers.html#header) directives. +# ``` puppet +# apache::vhost { 'sample.example.net': +# docroot => '/path/to/directory', +# directories => { +# path => '/path/to/directory', +# headers => 'Set X-Robots-Tag "noindex, noarchive, nosnippet"', +# }, +# } +# ``` +# +# @param options +# Lists the [Options](https://httpd.apache.org/docs/current/mod/core.html#options) for the +# given Directory block. +# ``` puppet +# apache::vhost { 'sample.example.net': +# docroot => '/path/to/directory', +# directories => [ +# { path => '/path/to/directory', +# options => ['Indexes','FollowSymLinks','MultiViews'], +# }, +# ], +# } +# ``` +# +# @param shib_compat_valid_user +# Default is Off, matching the behavior prior to this command's existence. Addresses a conflict +# when using Shibboleth in conjunction with other auth/auth modules by restoring `standard` +# Apache behavior when processing the `valid-user` and `user` Require rules. See the +# [`mod_shib`documentation](https://wiki.shibboleth.net/confluence/display/SHIB2/NativeSPApacheConfig#NativeSPApacheConfig-Server/VirtualHostOptions), +# and [NativeSPhtaccess](https://wiki.shibboleth.net/confluence/display/SHIB2/NativeSPhtaccess) +# topic for more details. This key is disabled if `apache::mod::shib` is not defined. +# +# @param ssl_options +# String or list of [SSLOptions](https://httpd.apache.org/docs/current/mod/mod_ssl.html#ssloptions), +# which configure SSL engine run-time options. This handler takes precedence over SSLOptions +# set in the parent block of the virtual host. +# ``` puppet +# apache::vhost { 'secure.example.net': +# docroot => '/path/to/directory', +# directories => [ +# { path => '/path/to/directory', +# ssl_options => '+ExportCertData', +# }, +# { path => '/path/to/different/dir', +# ssl_options => ['-StdEnvVars', '+ExportCertData'], +# }, +# ], +# } +# ``` +# +# @param additional_includes +# Specifies paths to additional static, specific Apache configuration files in virtual +# host directories. +# ``` puppet +# apache::vhost { 'sample.example.net': +# docroot => '/path/to/directory', +# directories => [ +# { path => '/path/to/different/dir', +# additional_includes => ['/custom/path/includes', '/custom/path/another_includes',], +# }, +# ], +# } +# ``` +# +# @param ssl +# Enables SSL for the virtual host. SSL virtual hosts only respond to HTTPS queries. +# +# @param ssl_ca +# Specifies the SSL certificate authority to be used to verify client certificates used +# for authentication. You must also set `ssl_verify_client` to use this. +# +# @param ssl_cert +# Specifies the SSL certification. +# +# @param ssl_protocol +# Specifies [SSLProtocol](https://httpd.apache.org/docs/current/mod/mod_ssl.html#sslprotocol). +# Expects an array or space separated string of accepted protocols. +# +# @param ssl_cipher +# Specifies [SSLCipherSuite](https://httpd.apache.org/docs/current/mod/mod_ssl.html#sslciphersuite). +# +# @param ssl_honorcipherorder +# Sets [SSLHonorCipherOrder](https://httpd.apache.org/docs/current/mod/mod_ssl.html#sslhonorcipherorder), +# to cause Apache to use the server's preferred order of ciphers rather than the client's +# preferred order. +# +# @param ssl_certs_dir +# Specifies the location of the SSL certification directory to verify client certs. Will not +# be used unless `ssl_verify_client` is also set (see below). +# +# @param ssl_chain +# Specifies the SSL chain. This default works out of the box, but it must be updated in +# the base `apache` class with your specific certificate information before being used in +# production. +# +# @param ssl_crl +# Specifies the certificate revocation list to use. (This default works out of the box but +# must be updated in the base `apache` class with your specific certificate information +# before being used in production.) +# +# @param ssl_crl_path +# Specifies the location of the certificate revocation list to verify certificates for +# client authentication with. (This default works out of the box but must be updated in +# the base `apache` class with your specific certificate information before being used in +# production.) +# +# @param ssl_crl_check +# Sets the certificate revocation check level via the [SSLCARevocationCheck directive](https://httpd.apache.org/docs/current/mod/mod_ssl.html#sslcarevocationcheck) +# for ssl client authentication. The default works out of the box but must be specified when +# using CRLs in production. Only applicable to Apache 2.4 or higher; the value is ignored on +# older versions. +# +# @param ssl_key +# Specifies the SSL key.<br /> +# Defaults are based on your operating system. Default work out of the box but must be +# updated in the base `apache` class with your specific certificate information before +# being used in production. +# +# @param ssl_verify_client +# Sets the [SSLVerifyClient](https://httpd.apache.org/docs/current/mod/mod_ssl.html#sslverifyclient) +# directive, which sets the certificate verification level for client authentication. +# ``` puppet +# apache::vhost { 'sample.example.net': +# … +# ssl_verify_client => 'optional', +# } +# ``` +# +# @param ssl_verify_depth +# Sets the [SSLVerifyDepth](https://httpd.apache.org/docs/current/mod/mod_ssl.html#sslverifydepth) +# directive, which specifies the maximum depth of CA certificates in client certificate +# verification. You must set `ssl_verify_client` for it to take effect. +# ``` puppet +# apache::vhost { 'sample.example.net': +# … +# ssl_verify_client => 'require', +# ssl_verify_depth => 1, +# } +# ``` +# +# @param ssl_proxy_protocol +# Sets the [SSLProxyProtocol](https://httpd.apache.org/docs/current/mod/mod_ssl.html#sslproxyprotocol) +# directive, which controls which SSL protocol flavors `mod_ssl` should use when establishing +# its server environment for proxy. It connects to servers using only one of the provided +# protocols. +# +# @param ssl_proxy_verify +# Sets the [SSLProxyVerify](https://httpd.apache.org/docs/current/mod/mod_ssl.html#sslproxyverify) +# directive, which configures certificate verification of the remote server when a proxy is +# configured to forward requests to a remote SSL server. +# +# @param ssl_proxy_verify_depth +# Sets the [SSLProxyVerifyDepth](https://httpd.apache.org/docs/current/mod/mod_ssl.html#sslproxyverifydepth) +# directive, which configures how deeply mod_ssl should verify before deciding that the +# remote server does not have a valid certificate.<br /> +# A depth of 0 means that only self-signed remote server certificates are accepted, +# the default depth of 1 means the remote server certificate can be self-signed or +# signed by a CA that is directly known to the server. +# +# @param ssl_proxy_cipher_suite +# Sets the [SSLProxyCipherSuite](https://httpd.apache.org/docs/current/mod/mod_ssl.html#sslproxyciphersuite) +# directive, which controls cipher suites supported for ssl proxy traffic. +# +# @param ssl_proxy_ca_cert +# Sets the [SSLProxyCACertificateFile](https://httpd.apache.org/docs/current/mod/mod_ssl.html#sslproxycacertificatefile) +# directive, which specifies an all-in-one file where you can assemble the Certificates +# of Certification Authorities (CA) whose remote servers you deal with. These are used +# for Remote Server Authentication. This file should be a concatenation of the PEM-encoded +# certificate files in order of preference. +# +# @param ssl_proxy_machine_cert +# Sets the [SSLProxyMachineCertificateFile](https://httpd.apache.org/docs/current/mod/mod_ssl.html#sslproxymachinecertificatefile) +# directive, which specifies an all-in-one file where you keep the certs and keys used +# for this server to authenticate itself to remote servers. This file should be a +# concatenation of the PEM-encoded certificate files in order of preference. +# ``` puppet +# apache::vhost { 'sample.example.net': +# … +# ssl_proxy_machine_cert => '/etc/httpd/ssl/client_certificate.pem', +# } +# ``` +# +# @param ssl_proxy_check_peer_cn +# Sets the [SSLProxyCheckPeerCN](https://httpd.apache.org/docs/current/mod/mod_ssl.html#sslproxycheckpeercn) +# directive, which specifies whether the remote server certificate's CN field is compared +# against the hostname of the request URL. +# +# @param ssl_proxy_check_peer_name +# Sets the [SSLProxyCheckPeerName](https://httpd.apache.org/docs/current/mod/mod_ssl.html#sslproxycheckpeername) +# directive, which specifies whether the remote server certificate's CN field is compared +# against the hostname of the request URL. +# +# @param ssl_proxy_check_peer_expire +# Sets the [SSLProxyCheckPeerExpire](https://httpd.apache.org/docs/current/mod/mod_ssl.html#sslproxycheckpeerexpire) +# directive, which specifies whether the remote server certificate is checked for expiration +# or not. +# +# @param ssl_options +# Sets the [SSLOptions](https://httpd.apache.org/docs/current/mod/mod_ssl.html#ssloptions) +# directive, which configures various SSL engine run-time options. This is the global +# setting for the given virtual host and can be a string or an array.<br /> +# A string: +# ``` puppet +# apache::vhost { 'sample.example.net': +# … +# ssl_options => '+ExportCertData', +# } +# ``` +# An array: +# ``` puppet +# apache::vhost { 'sample.example.net': +# … +# ssl_options => ['+StrictRequire', '+ExportCertData'], +# } +# ``` +# +# @param ssl_openssl_conf_cmd +# Sets the [SSLOpenSSLConfCmd](https://httpd.apache.org/docs/current/mod/mod_ssl.html#sslopensslconfcmd) +# directive, which provides direct configuration of OpenSSL parameters. +# +# @param ssl_proxyengine +# Specifies whether or not to use [SSLProxyEngine](https://httpd.apache.org/docs/current/mod/mod_ssl.html#sslproxyengine). +# +# @param ssl_stapling +# Specifies whether or not to use [SSLUseStapling](http://httpd.apache.org/docs/current/mod/mod_ssl.html#sslusestapling). +# By default, uses what is set globally.<br /> +# This parameter only applies to Apache 2.4 or higher and is ignored on older versions. +# +# @param ssl_stapling_timeout +# Can be used to set the [SSLStaplingResponderTimeout](http://httpd.apache.org/docs/current/mod/mod_ssl.html#sslstaplingrespondertimeout) directive.<br /> +# This parameter only applies to Apache 2.4 or higher and is ignored on older versions. +# +# @param ssl_stapling_return_errors +# Can be used to set the [SSLStaplingReturnResponderErrors](http://httpd.apache.org/docs/current/mod/mod_ssl.html#sslstaplingreturnrespondererrors) directive.<br /> +# This parameter only applies to Apache 2.4 or higher and is ignored on older versions. +# +# @param use_canonical_name +# Specifies whether to use the [`UseCanonicalName directive`](https://httpd.apache.org/docs/2.4/mod/core.html#usecanonicalname), +# which allows you to configure how the server determines it's own name and port. +# +# @param define +# this lets you define configuration variables inside a vhost using [`Define`](https://httpd.apache.org/docs/2.4/mod/core.html#define), +# these can then be used to replace configuration values. All Defines are Undefined at the end of the VirtualHost. +# define apache::vhost( - $docroot, - $manage_docroot = true, - $virtual_docroot = false, - $port = undef, - $ip = undef, - $ip_based = false, - $add_listen = true, - $docroot_owner = 'root', - $docroot_group = $::apache::params::root_group, - $docroot_mode = undef, - $serveradmin = undef, - $ssl = false, - $ssl_cert = $::apache::default_ssl_cert, - $ssl_key = $::apache::default_ssl_key, - $ssl_chain = $::apache::default_ssl_chain, - $ssl_ca = $::apache::default_ssl_ca, - $ssl_crl_path = $::apache::default_ssl_crl_path, - $ssl_crl = $::apache::default_ssl_crl, - $ssl_crl_check = $::apache::default_ssl_crl_check, - $ssl_certs_dir = $::apache::params::ssl_certs_dir, - $ssl_protocol = undef, - $ssl_cipher = undef, - $ssl_honorcipherorder = undef, - $ssl_verify_client = undef, - $ssl_verify_depth = undef, - $ssl_proxy_verify = undef, - $ssl_proxy_check_peer_cn = undef, - $ssl_proxy_check_peer_name = undef, - $ssl_proxy_check_peer_expire = undef, - $ssl_proxy_machine_cert = undef, - $ssl_proxy_protocol = undef, - $ssl_options = undef, - $ssl_openssl_conf_cmd = undef, - $ssl_proxyengine = false, - $ssl_stapling = undef, - $ssl_stapling_timeout = undef, - $ssl_stapling_return_errors = undef, - $priority = undef, - $default_vhost = false, - $servername = $name, - $serveraliases = [], - $options = ['Indexes','FollowSymLinks','MultiViews'], - $override = ['None'], - $directoryindex = '', - $vhost_name = '*', - $logroot = $::apache::logroot, - $logroot_ensure = 'directory', - $logroot_mode = undef, - $logroot_owner = undef, - $logroot_group = undef, - $log_level = undef, - $access_log = true, - $access_log_file = false, - $access_log_pipe = false, - $access_log_syslog = false, - $access_log_format = false, - $access_log_env_var = false, - $access_logs = undef, - $aliases = undef, - $directories = undef, - $error_log = true, - $error_log_file = undef, - $error_log_pipe = undef, - $error_log_syslog = undef, - $modsec_audit_log = undef, - $modsec_audit_log_file = undef, - $modsec_audit_log_pipe = undef, - $error_documents = [], - $fallbackresource = undef, - $scriptalias = undef, - $scriptaliases = [], - $proxy_dest = undef, - $proxy_dest_match = undef, - $proxy_dest_reverse_match = undef, - $proxy_pass = undef, - $proxy_pass_match = undef, - $suphp_addhandler = $::apache::params::suphp_addhandler, - $suphp_engine = $::apache::params::suphp_engine, - $suphp_configpath = $::apache::params::suphp_configpath, - $php_flags = {}, - $php_values = {}, - $php_admin_flags = {}, - $php_admin_values = {}, - $no_proxy_uris = [], - $no_proxy_uris_match = [], - $proxy_preserve_host = false, - $proxy_add_headers = undef, - $proxy_error_override = false, - $redirect_source = '/', - $redirect_dest = undef, - $redirect_status = undef, - $redirectmatch_status = undef, - $redirectmatch_regexp = undef, - $redirectmatch_dest = undef, - $rack_base_uris = undef, - $passenger_base_uris = undef, - $headers = undef, - $request_headers = undef, - $filters = undef, - $rewrites = undef, - $rewrite_base = undef, - $rewrite_rule = undef, - $rewrite_cond = undef, - $rewrite_inherit = false, - $setenv = [], - $setenvif = [], - $setenvifnocase = [], - $block = [], - $ensure = 'present', - $wsgi_application_group = undef, - $wsgi_daemon_process = undef, - $wsgi_daemon_process_options = undef, - $wsgi_import_script = undef, - $wsgi_import_script_options = undef, - $wsgi_process_group = undef, - $wsgi_script_aliases_match = undef, - $wsgi_script_aliases = undef, - $wsgi_pass_authorization = undef, - $wsgi_chunked_request = undef, - $custom_fragment = undef, - $itk = undef, - $action = undef, - $fastcgi_server = undef, - $fastcgi_socket = undef, - $fastcgi_dir = undef, - $fastcgi_idle_timeout = undef, - $additional_includes = [], - $use_optional_includes = $::apache::use_optional_includes, - $apache_version = $::apache::apache_version, - $allow_encoded_slashes = undef, - $suexec_user_group = undef, - $passenger_app_root = undef, - $passenger_app_env = undef, - $passenger_ruby = undef, - $passenger_min_instances = undef, - $passenger_start_timeout = undef, - $passenger_pre_start = undef, - $passenger_user = undef, - $passenger_high_performance = undef, - $passenger_nodejs = undef, - $passenger_sticky_sessions = undef, - $passenger_startup_file = undef, - $add_default_charset = undef, - $modsec_disable_vhost = undef, - $modsec_disable_ids = undef, - $modsec_disable_ips = undef, - $modsec_disable_msgs = undef, - $modsec_disable_tags = undef, - $modsec_body_limit = undef, - $jk_mounts = undef, - $auth_kerb = false, - $krb_method_negotiate = 'on', - $krb_method_k5passwd = 'on', - $krb_authoritative = 'on', - $krb_auth_realms = [], - $krb_5keytab = undef, - $krb_local_user_mapping = undef, - $krb_verify_kdc = 'on', - $krb_servicename = 'HTTP', - $krb_save_credentials = 'off', - $keepalive = undef, - $keepalive_timeout = undef, - $max_keepalive_requests = undef, - $cas_attribute_prefix = undef, - $cas_attribute_delimiter = undef, - $cas_scrub_request_headers = undef, - $cas_sso_enabled = undef, - $cas_login_url = undef, - $cas_validate_url = undef, - $cas_validate_saml = undef, + Variant[Boolean,String] $docroot, + $manage_docroot = true, + $virtual_docroot = false, + $port = undef, + $ip = undef, + Boolean $ip_based = false, + $add_listen = true, + $docroot_owner = 'root', + $docroot_group = $::apache::params::root_group, + $docroot_mode = undef, + Array[Enum['h2', 'h2c', 'http/1.1']] $protocols = [], + Optional[Boolean] $protocols_honor_order = undef, + $serveradmin = undef, + Boolean $ssl = false, + $ssl_cert = $::apache::default_ssl_cert, + $ssl_key = $::apache::default_ssl_key, + $ssl_chain = $::apache::default_ssl_chain, + $ssl_ca = $::apache::default_ssl_ca, + $ssl_crl_path = $::apache::default_ssl_crl_path, + $ssl_crl = $::apache::default_ssl_crl, + $ssl_crl_check = $::apache::default_ssl_crl_check, + $ssl_certs_dir = $::apache::params::ssl_certs_dir, + $ssl_protocol = undef, + $ssl_cipher = undef, + $ssl_honorcipherorder = undef, + $ssl_verify_client = undef, + $ssl_verify_depth = undef, + Optional[Enum['none', 'optional', 'require', 'optional_no_ca']] $ssl_proxy_verify = undef, + Optional[Integer[0]] $ssl_proxy_verify_depth = undef, + $ssl_proxy_ca_cert = undef, + Optional[Enum['on', 'off']] $ssl_proxy_check_peer_cn = undef, + Optional[Enum['on', 'off']] $ssl_proxy_check_peer_name = undef, + Optional[Enum['on', 'off']] $ssl_proxy_check_peer_expire = undef, + $ssl_proxy_machine_cert = undef, + $ssl_proxy_cipher_suite = undef, + $ssl_proxy_protocol = undef, + $ssl_options = undef, + $ssl_openssl_conf_cmd = undef, + Boolean $ssl_proxyengine = false, + Optional[Boolean] $ssl_stapling = undef, + $ssl_stapling_timeout = undef, + $ssl_stapling_return_errors = undef, + $priority = undef, + Boolean $default_vhost = false, + $servername = $name, + $serveraliases = [], + $options = ['Indexes','FollowSymLinks','MultiViews'], + $override = ['None'], + $directoryindex = '', + $vhost_name = '*', + $logroot = $::apache::logroot, + Enum['directory', 'absent'] $logroot_ensure = 'directory', + $logroot_mode = undef, + $logroot_owner = undef, + $logroot_group = undef, + $log_level = undef, + Boolean $access_log = true, + $access_log_file = false, + $access_log_pipe = false, + $access_log_syslog = false, + $access_log_format = false, + $access_log_env_var = false, + Optional[Array] $access_logs = undef, + $aliases = undef, + Optional[Variant[Hash, Array[Variant[Array,Hash]]]] $directories = undef, + Boolean $error_log = true, + $error_log_file = undef, + $error_log_pipe = undef, + $error_log_syslog = undef, + Optional[Pattern[/^((Strict|Unsafe)?\s*(\b(Registered|Lenient)Methods)?\s*(\b(Allow0\.9|Require1\.0))?)$/]] $http_protocol_options = undef, + $modsec_audit_log = undef, + $modsec_audit_log_file = undef, + $modsec_audit_log_pipe = undef, + $error_documents = [], + Optional[Variant[Stdlib::Absolutepath, Enum['disabled']]] $fallbackresource = undef, + $scriptalias = undef, + $scriptaliases = [], + $proxy_dest = undef, + $proxy_dest_match = undef, + $proxy_dest_reverse_match = undef, + $proxy_pass = undef, + $proxy_pass_match = undef, + Boolean $proxy_requests = false, + $suphp_addhandler = $::apache::params::suphp_addhandler, + Enum['on', 'off'] $suphp_engine = $::apache::params::suphp_engine, + $suphp_configpath = $::apache::params::suphp_configpath, + $php_flags = {}, + $php_values = {}, + $php_admin_flags = {}, + $php_admin_values = {}, + $no_proxy_uris = [], + $no_proxy_uris_match = [], + $proxy_preserve_host = false, + $proxy_add_headers = undef, + $proxy_error_override = false, + $redirect_source = '/', + $redirect_dest = undef, + $redirect_status = undef, + $redirectmatch_status = undef, + $redirectmatch_regexp = undef, + $redirectmatch_dest = undef, + $headers = undef, + $request_headers = undef, + $filters = undef, + Optional[Array] $rewrites = undef, + $rewrite_base = undef, + $rewrite_rule = undef, + $rewrite_cond = undef, + $rewrite_inherit = false, + $setenv = [], + $setenvif = [], + $setenvifnocase = [], + $block = [], + Enum['absent', 'present'] $ensure = 'present', + $wsgi_application_group = undef, + Optional[Variant[String,Hash]] $wsgi_daemon_process = undef, + Optional[Hash] $wsgi_daemon_process_options = undef, + $wsgi_import_script = undef, + Optional[Hash] $wsgi_import_script_options = undef, + $wsgi_process_group = undef, + Optional[Hash] $wsgi_script_aliases_match = undef, + Optional[Hash] $wsgi_script_aliases = undef, + Optional[Enum['on', 'off', 'On', 'Off']] $wsgi_pass_authorization = undef, + $wsgi_chunked_request = undef, + Optional[String] $custom_fragment = undef, + Optional[Hash] $itk = undef, + $action = undef, + $fastcgi_server = undef, + $fastcgi_socket = undef, + $fastcgi_dir = undef, + $fastcgi_idle_timeout = undef, + $additional_includes = [], + $use_optional_includes = $::apache::use_optional_includes, + $apache_version = $::apache::apache_version, + Optional[Enum['on', 'off', 'nodecode']] $allow_encoded_slashes = undef, + Optional[Pattern[/^[\w-]+ [\w-]+$/]] $suexec_user_group = undef, + + Optional[Boolean] $h2_copy_files = undef, + Optional[Boolean] $h2_direct = undef, + Optional[Boolean] $h2_early_hints = undef, + Optional[Integer] $h2_max_session_streams = undef, + Optional[Boolean] $h2_modern_tls_only = undef, + Optional[Boolean] $h2_push = undef, + Optional[Integer] $h2_push_diary_size = undef, + Array[String] $h2_push_priority = [], + Array[String] $h2_push_resource = [], + Optional[Boolean] $h2_serialize_headers = undef, + Optional[Integer] $h2_stream_max_mem_size = undef, + Optional[Integer] $h2_tls_cool_down_secs = undef, + Optional[Integer] $h2_tls_warm_up_size = undef, + Optional[Boolean] $h2_upgrade = undef, + Optional[Integer] $h2_window_size = undef, + + Optional[Boolean] $passenger_enabled = undef, + Optional[String] $passenger_base_uri = undef, + Optional[Stdlib::Absolutepath] $passenger_ruby = undef, + Optional[Stdlib::Absolutepath] $passenger_python = undef, + Optional[Stdlib::Absolutepath] $passenger_nodejs = undef, + Optional[String] $passenger_meteor_app_settings = undef, + Optional[String] $passenger_app_env = undef, + Optional[Stdlib::Absolutepath] $passenger_app_root = undef, + Optional[String] $passenger_app_group_name = undef, + Optional[Enum['meteor', 'node', 'rack', 'wsgi']] $passenger_app_type = undef, + Optional[String] $passenger_startup_file = undef, + Optional[String] $passenger_restart_dir = undef, + Optional[Enum['direct', 'smart']] $passenger_spawn_method = undef, + Optional[Boolean] $passenger_load_shell_envvars = undef, + Optional[Boolean] $passenger_rolling_restarts = undef, + Optional[Boolean] $passenger_resist_deployment_errors = undef, + Optional[String] $passenger_user = undef, + Optional[String] $passenger_group = undef, + Optional[Boolean] $passenger_friendly_error_pages = undef, + Optional[Integer] $passenger_min_instances = undef, + Optional[Integer] $passenger_max_instances = undef, + Optional[Integer] $passenger_max_preloader_idle_time = undef, + Optional[Integer] $passenger_force_max_concurrent_requests_per_process = undef, + Optional[Integer] $passenger_start_timeout = undef, + Optional[Enum['process', 'thread']] $passenger_concurrency_model = undef, + Optional[Integer] $passenger_thread_count = undef, + Optional[Integer] $passenger_max_requests = undef, + Optional[Integer] $passenger_max_request_time = undef, + Optional[Integer] $passenger_memory_limit = undef, + Optional[Integer] $passenger_stat_throttle_rate = undef, + Optional[Variant[String,Array[String]]] $passenger_pre_start = undef, + Optional[Boolean] $passenger_high_performance = undef, + Optional[Boolean] $passenger_buffer_upload = undef, + Optional[Boolean] $passenger_buffer_response = undef, + Optional[Boolean] $passenger_error_override = undef, + Optional[Integer] $passenger_max_request_queue_size = undef, + Optional[Integer] $passenger_max_request_queue_time = undef, + Optional[Boolean] $passenger_sticky_sessions = undef, + Optional[String] $passenger_sticky_sessions_cookie_name = undef, + Optional[Boolean] $passenger_allow_encoded_slashes = undef, + Optional[Boolean] $passenger_debugger = undef, + Optional[Integer] $passenger_lve_min_uid = undef, + $add_default_charset = undef, + $modsec_disable_vhost = undef, + Optional[Variant[Hash, Array]] $modsec_disable_ids = undef, + $modsec_disable_ips = undef, + Optional[Variant[Hash, Array]] $modsec_disable_msgs = undef, + Optional[Variant[Hash, Array]] $modsec_disable_tags = undef, + $modsec_body_limit = undef, + $jk_mounts = undef, + Boolean $auth_kerb = false, + $krb_method_negotiate = 'on', + $krb_method_k5passwd = 'on', + $krb_authoritative = 'on', + $krb_auth_realms = [], + $krb_5keytab = undef, + $krb_local_user_mapping = undef, + $krb_verify_kdc = 'on', + $krb_servicename = 'HTTP', + $krb_save_credentials = 'off', + Optional[Enum['on', 'off']] $keepalive = undef, + $keepalive_timeout = undef, + $max_keepalive_requests = undef, + $cas_attribute_prefix = undef, + $cas_attribute_delimiter = undef, + $cas_root_proxied_as = undef, + $cas_scrub_request_headers = undef, + $cas_sso_enabled = undef, + $cas_login_url = undef, + $cas_validate_url = undef, + $cas_validate_saml = undef, + Optional[String] $shib_compat_valid_user = undef, + Optional[Enum['On', 'on', 'Off', 'off', 'DNS', 'dns']] $use_canonical_name = undef, + Optional[Variant[String,Array[String]]] $comment = undef, + Hash $define = {}, ) { + # The base class must be included first because it is used by parameter defaults if ! defined(Class['apache']) { fail('You must include the apache base class before using any apache defined resources') @@ -178,84 +1864,17 @@ $apache_name = $::apache::apache_name - validate_re($ensure, '^(present|absent)$', - "${ensure} is not supported for ensure. - Allowed values are 'present' and 'absent'.") - validate_re($suphp_engine, '^(on|off)$', - "${suphp_engine} is not supported for suphp_engine. - Allowed values are 'on' and 'off'.") - validate_bool($ip_based) - validate_bool($access_log) - validate_bool($error_log) - if $modsec_audit_log != undef { - validate_bool($modsec_audit_log) - } - validate_bool($ssl) - validate_bool($default_vhost) - validate_bool($ssl_proxyengine) - if $ssl_stapling != undef { - validate_bool($ssl_stapling) - } if $rewrites { - validate_array($rewrites) unless empty($rewrites) { $rewrites_flattened = delete_undef_values(flatten([$rewrites])) - validate_hash($rewrites_flattened[0]) + assert_type(Array[Hash], $rewrites_flattened) } } # Input validation begins - if $suexec_user_group { - validate_re($suexec_user_group, '^[\w-]+ [\w-]+$', - "${suexec_user_group} is not supported for suexec_user_group. Must be 'user group'.") - } - - if $wsgi_pass_authorization { - validate_re(downcase($wsgi_pass_authorization), '^(on|off)$', - "${wsgi_pass_authorization} is not supported for wsgi_pass_authorization. - Allowed values are 'on' and 'off'.") - } - - if $wsgi_chunked_request { - validate_re(downcase($wsgi_chunked_request), '^(on|off)$', - "${wsgi_chunked_request} is not supported for wsgi_chunked_request. - Allowed values are 'on' and 'off'.") - } - - # Deprecated backwards-compatibility - if $rewrite_base { - warning('Apache::Vhost: parameter rewrite_base is deprecated in favor of rewrites') - } - if $rewrite_rule { - warning('Apache::Vhost: parameter rewrite_rule is deprecated in favor of rewrites') - } - if $rewrite_cond { - warning('Apache::Vhost parameter rewrite_cond is deprecated in favor of rewrites') - } - - if $wsgi_script_aliases { - validate_hash($wsgi_script_aliases) - } - if $wsgi_script_aliases_match { - validate_hash($wsgi_script_aliases_match) - } - if $wsgi_daemon_process_options { - validate_hash($wsgi_daemon_process_options) - } - if $wsgi_import_script_options { - validate_hash($wsgi_import_script_options) - } - if $itk { - validate_hash($itk) - } - - validate_re($logroot_ensure, '^(directory|absent)$', - "${logroot_ensure} is not supported for logroot_ensure. - Allowed values are 'directory' and 'absent'.") - if $log_level { - validate_apache_log_level($log_level) + apache::validate_apache_log_level($log_level) } if $access_log_file and $access_log_pipe { @@ -270,49 +1889,6 @@ fail("Apache::Vhost[${name}]: 'modsec_audit_log_file' and 'modsec_audit_log_pipe' cannot be defined at the same time") } - if $fallbackresource { - validate_re($fallbackresource, '^/|disabled', 'Please make sure fallbackresource starts with a / (or is "disabled")') - } - - if $custom_fragment { - validate_string($custom_fragment) - } - - if $allow_encoded_slashes { - validate_re($allow_encoded_slashes, '(^on$|^off$|^nodecode$)', "${allow_encoded_slashes} is not permitted for allow_encoded_slashes. Allowed values are 'on', 'off' or 'nodecode'.") - } - - validate_bool($auth_kerb) - - # Validate the docroot as a string if: - # - $manage_docroot is true - if $manage_docroot { - validate_string($docroot) - } - - if $ssl_proxy_verify { - validate_re($ssl_proxy_verify,'^(none|optional|require|optional_no_ca)$',"${ssl_proxy_verify} is not permitted for ssl_proxy_verify. Allowed values are 'none', 'optional', 'require' or 'optional_no_ca'.") - } - - if $ssl_proxy_check_peer_cn { - validate_re($ssl_proxy_check_peer_cn,'(^on$|^off$)',"${ssl_proxy_check_peer_cn} is not permitted for ssl_proxy_check_peer_cn. Allowed values are 'on' or 'off'.") - } - if $ssl_proxy_check_peer_name { - validate_re($ssl_proxy_check_peer_name,'(^on$|^off$)',"${ssl_proxy_check_peer_name} is not permitted for ssl_proxy_check_peer_name. Allowed values are 'on' or 'off'.") - } - - if $ssl_proxy_check_peer_expire { - validate_re($ssl_proxy_check_peer_expire,'(^on$|^off$)',"${ssl_proxy_check_peer_expire} is not permitted for ssl_proxy_check_peer_expire. Allowed values are 'on' or 'off'.") - } - - if $keepalive { - validate_re($keepalive,'(^on$|^off$)',"${keepalive} is not permitted for keepalive. Allowed values are 'on' or 'off'.") - } - - if $passenger_sticky_sessions { - validate_bool($passenger_sticky_sessions) - } - # Input validation ends if $ssl and $ensure == 'present' { @@ -329,7 +1905,7 @@ include ::apache::mod::vhost_alias } - if $wsgi_daemon_process { + if $wsgi_application_group or $wsgi_daemon_process or ($wsgi_import_script and $wsgi_import_script_options) or $wsgi_process_group or ($wsgi_script_aliases and ! empty($wsgi_script_aliases)) or $wsgi_pass_authorization { include ::apache::mod::wsgi } @@ -337,7 +1913,7 @@ include ::apache::mod::suexec } - if $passenger_app_root or $passenger_app_env or $passenger_ruby or $passenger_min_instances or $passenger_start_timeout or $passenger_pre_start or $passenger_user or $passenger_high_performance or $passenger_nodejs or $passenger_sticky_sessions or $passenger_startup_file { + if $passenger_spawn_method or $passenger_app_root or $passenger_app_env or $passenger_ruby or $passenger_min_instances or $passenger_max_requests or $passenger_start_timeout or $passenger_pre_start or $passenger_user or $passenger_group or $passenger_high_performance or $passenger_nodejs or $passenger_sticky_sessions or $passenger_startup_file { include ::apache::mod::passenger } @@ -377,13 +1953,10 @@ mode => $logroot_mode, require => Package['httpd'], before => Concat["${priority_real}${filename}.conf"], + notify => Class['Apache::Service'], } } - - # Is apache::mod::passenger enabled (or apache::mod['passenger']) - $passenger_enabled = defined(Apache::Mod['passenger']) - # Is apache::mod::shib enabled (or apache::mod['shib2']) $shibboleth_enabled = defined(Apache::Mod['shib2']) @@ -391,15 +1964,6 @@ $cas_enabled = defined(Apache::Mod['auth_cas']) if $access_log and !$access_logs { - if $access_log_file { - $_logs_dest = "${logroot}/${access_log_file}" - } elsif $access_log_pipe { - $_logs_dest = $access_log_pipe - } elsif $access_log_syslog { - $_logs_dest = $access_log_syslog - } else { - $_logs_dest = undef - } $_access_logs = [{ 'file' => $access_log_file, 'pipe' => $access_log_pipe, @@ -408,14 +1972,16 @@ 'env' => $access_log_env_var }] } elsif $access_logs { - if !is_array($access_logs) { - fail("Apache::Vhost[${name}]: access_logs must be an array of hashes") - } $_access_logs = $access_logs } if $error_log_file { - $error_log_destination = "${logroot}/${error_log_file}" + if $error_log_file =~ /^\// { + # Absolute path provided - don't prepend $logroot + $error_log_destination = $error_log_file + } else { + $error_log_destination = "${logroot}/${error_log_file}" + } } elsif $error_log_pipe { $error_log_destination = $error_log_pipe } elsif $error_log_syslog { @@ -446,10 +2012,11 @@ if $ip { - $_ip = enclose_ipv6($ip) + $_ip = any2array(enclose_ipv6($ip)) if $port { - $listen_addr_port = suffix(any2array($_ip),":${port}") - $nvh_addr_port = suffix(any2array($_ip),":${port}") + $_port = any2array($port) + $listen_addr_port = split(inline_template("<%= @_ip.product(@_port).map {|x| x.join(':') }.join(',')%>"), ',') + $nvh_addr_port = split(inline_template("<%= @_ip.product(@_port).map {|x| x.join(':') }.join(',')%>"), ',') } else { $listen_addr_port = undef $nvh_addr_port = $_ip @@ -460,7 +2027,7 @@ } else { if $port { $listen_addr_port = $port - $nvh_addr_port = "${vhost_name}:${port}" + $nvh_addr_port = prefix(any2array($port),"${vhost_name}:") } else { $listen_addr_port = undef $nvh_addr_port = $name @@ -469,8 +2036,9 @@ } } } + if $add_listen { - if $ip and defined(Apache::Listen["${port}"]) { + if $ip and defined(Apache::Listen[String($port)]) { fail("Apache::Vhost[${name}]: Mixing IP and non-IP Listen directives is not possible; check the add_listen parameter of the apache::vhost define to disable this") } if $listen_addr_port and $ensure == 'present' { @@ -491,7 +2059,10 @@ } # Load mod_alias if needed and not yet loaded - if ($scriptalias or $scriptaliases != []) or ($aliases and $aliases != []) or ($redirect_source and $redirect_dest) { + if ($scriptalias or $scriptaliases != []) + or ($aliases and $aliases != []) + or ($redirect_source and $redirect_dest) + or ($redirectmatch_regexp or $redirectmatch_status or $redirectmatch_dest){ if ! defined(Class['apache::mod::alias']) and ($ensure == 'present') { include ::apache::mod::alias } @@ -507,19 +2078,7 @@ } } - # Load mod_passenger if needed and not yet loaded - if $rack_base_uris { - if ! defined(Class['apache::mod::passenger']) { - include ::apache::mod::passenger - } - } - - # Load mod_passenger if needed and not yet loaded - if $passenger_base_uris { - include ::apache::mod::passenger - } - - # Load mod_fastci if needed and not yet loaded + # Load mod_fastcgi if needed and not yet loaded if $fastcgi_server and $fastcgi_socket { if ! defined(Class['apache::mod::fastcgi']) { include ::apache::mod::fastcgi @@ -560,9 +2119,6 @@ ## Create a default directory list if none defined if $directories { - if !is_hash($directories) and !(is_array($directories) and is_hash($directories[0])) { - fail("Apache::Vhost[${name}]: 'directories' must be either a Hash or an Array of Hashes") - } $_directories = $directories } elsif $docroot { $_directory = { @@ -591,32 +2147,26 @@ ## Create a global LocationMatch if locations aren't defined if $modsec_disable_ids { - if is_hash($modsec_disable_ids) { - $_modsec_disable_ids = $modsec_disable_ids - } elsif is_array($modsec_disable_ids) { + if $modsec_disable_ids =~ Array { $_modsec_disable_ids = { '.*' => $modsec_disable_ids } } else { - fail("Apache::Vhost[${name}]: 'modsec_disable_ids' must be either a Hash of location/IDs or an Array of IDs") + $_modsec_disable_ids = $modsec_disable_ids } } if $modsec_disable_msgs { - if is_hash($modsec_disable_msgs) { - $_modsec_disable_msgs = $modsec_disable_msgs - } elsif is_array($modsec_disable_msgs) { + if $modsec_disable_msgs =~ Array { $_modsec_disable_msgs = { '.*' => $modsec_disable_msgs } } else { - fail("Apache::Vhost[${name}]: 'modsec_disable_msgs' must be either a Hash of location/Msgs or an Array of Msgs") + $_modsec_disable_msgs = $modsec_disable_msgs } } if $modsec_disable_tags { - if is_hash($modsec_disable_tags) { - $_modsec_disable_tags = $modsec_disable_tags - } elsif is_array($modsec_disable_tags) { + if $modsec_disable_tags =~ Array { $_modsec_disable_tags = { '.*' => $modsec_disable_tags } } else { - fail("Apache::Vhost[${name}]: 'modsec_disable_tags' must be either a Hash of location/Tags or an Array of Tags") + $_modsec_disable_tags = $modsec_disable_tags } } @@ -651,9 +2201,13 @@ } # Template uses: + # - $comment # - $nvh_addr_port # - $servername # - $serveradmin + # - $protocols + # - $protocols_honor_order + # - $apache_version concat::fragment { "${name}-apache-header": target => "${priority_real}${filename}.conf", order => 0, @@ -829,7 +2383,7 @@ # - $proxy_preserve_host # - $proxy_add_headers # - $no_proxy_uris - if $proxy_dest or $proxy_pass or $proxy_pass_match or $proxy_dest_match { + if $proxy_dest or $proxy_pass or $proxy_pass_match or $proxy_dest_match or $proxy_preserve_host { concat::fragment { "${name}-proxy": target => "${priority_real}${filename}.conf", order => 160, @@ -838,26 +2392,6 @@ } # Template uses: - # - $rack_base_uris - if $rack_base_uris { - concat::fragment { "${name}-rack": - target => "${priority_real}${filename}.conf", - order => 170, - content => template('apache/vhost/_rack.erb'), - } - } - - # Template uses: - # - $passenger_base_uris - if $passenger_base_uris { - concat::fragment { "${name}-passenger_uris": - target => "${priority_real}${filename}.conf", - order => 175, - content => template('apache/vhost/_passenger_base_uris.erb'), - } - } - - # Template uses: # - $redirect_source # - $redirect_dest # - $redirect_status @@ -954,6 +2488,8 @@ # Template uses: # - $ssl_proxyengine # - $ssl_proxy_verify + # - $ssl_proxy_verify_depth + # - $ssl_proxy_ca_cert # - $ssl_proxy_check_peer_cn # - $ssl_proxy_check_peer_name # - $ssl_proxy_check_peer_expire @@ -1026,6 +2562,9 @@ # - $wsgi_process_group # - $wsgi_script_aliases # - $wsgi_pass_authorization + if $wsgi_daemon_process_options { + deprecation('apache::vhost::wsgi_daemon_process_options', 'This parameter is deprecated. Please add values inside Hash `wsgi_daemon_process`.') + } if $wsgi_application_group or $wsgi_daemon_process or ($wsgi_import_script and $wsgi_import_script_options) or $wsgi_process_group or ($wsgi_script_aliases and ! empty($wsgi_script_aliases)) or $wsgi_pass_authorization { concat::fragment { "${name}-wsgi": target => "${priority_real}${filename}.conf", @@ -1068,18 +2607,30 @@ } } + if $h2_copy_files != undef or $h2_direct != undef or $h2_early_hints != undef or $h2_max_session_streams != undef or $h2_modern_tls_only != undef or $h2_push != undef or $h2_push_diary_size != undef or $h2_push_priority != [] or $h2_push_resource != [] or $h2_serialize_headers != undef or $h2_stream_max_mem_size != undef or $h2_tls_cool_down_secs != undef or $h2_tls_warm_up_size != undef or $h2_upgrade != undef or $h2_window_size != undef { + include ::apache::mod::http2 + + concat::fragment { "${name}-http2": + target => "${priority_real}${filename}.conf", + order => 300, + content => template('apache/vhost/_http2.erb'), + } + } + # Template uses: + # - $passenger_spawn_method # - $passenger_app_root # - $passenger_app_env # - $passenger_ruby # - $passenger_min_instances + # - $passenger_max_requests # - $passenger_start_timeout - # - $passenger_pre_start # - $passenger_user + # - $passenger_group # - $passenger_nodejs # - $passenger_sticky_sessions # - $passenger_startup_file - if $passenger_app_root or $passenger_app_env or $passenger_ruby or $passenger_min_instances or $passenger_start_timeout or $passenger_pre_start or $passenger_user or $passenger_nodejs or $passenger_sticky_sessions or $passenger_startup_file{ + if $passenger_spawn_method or $passenger_app_root or $passenger_app_env or $passenger_ruby or $passenger_min_instances or $passenger_start_timeout or $passenger_user or $passenger_group or $passenger_nodejs or $passenger_sticky_sessions or $passenger_startup_file{ concat::fragment { "${name}-passenger": target => "${priority_real}${filename}.conf", order => 300, @@ -1155,6 +2706,35 @@ } } + # Template uses: + # - $http_protocol_options + if $http_protocol_options { + concat::fragment { "${name}-http_protocol_options": + target => "${priority_real}${filename}.conf", + order => 350, + content => template('apache/vhost/_http_protocol_options.erb'), + } + } + + # Template uses: + # - $shib_compat_valid_user + if $shibboleth_enabled { + concat::fragment { "${name}-shibboleth": + target => "${priority_real}${filename}.conf", + order => 370, + content => template('apache/vhost/_shib.erb'), + } + } + + # - $use_canonical_name + if $use_canonical_name { + concat::fragment { "${name}-use_canonical_name": + target => "${priority_real}${filename}.conf", + order => 360, + content => template('apache/vhost/_use_canonical_name.erb'), + } + } + # Template uses no variables concat::fragment { "${name}-file_footer": target => "${priority_real}${filename}.conf",