Appendix C. Mod_proxy_cluster connector modules The mod_proxy_cluster connector is a reduced-configuration, intelligent load-balancing solution based on technology that the JBoss mod_cluster community project originally developed. The mod_proxy_cluster connector enables the Apache HTTP Server to act as an advanced load-balancer for forwarding traffic to back-end applications running on JBoss Web Server or JBoss EAP hosts. The mod_proxy_cluster connector provides all the functionality of mod_jk and additional features such as real-time load-balancing calculations, application life-cycle control, automatic proxy discovery, and multiple protocol support. This appendix describes the modules that the mod_proxy_cluster connector uses. Note You can configure the mod_proxy_cluster connector by using the configurable directives for mod_proxy , such as ProxyIOBufferSize . C.1. Mod_manager.so module and directives The cluster manager module, mod_manager.so , receives and acknowledges messages from nodes, including worker node registrations, worker node load data, and worker node application life cycle events. Configurable directives for mod_manager.so Configurable directives in the <VirtualHost> element are as follows: EnableMCPMReceive Allows the VirtualHost to receive mod_cluster management protocol (MCMP) messages. Add one EnableMCPMReceive directive to the Apache HTTP Server configuration to allow mod_proxy_cluster to operate correctly. EnableMCPMReceive must be added in the VirtualHost configuration at the location where advertise is configured. MaxMCMPMaxMessSize Defines the maximum size of MCMP messages. The default value is calculated from other Max directives. The minimum value is 1024 . AllowDisplay Toggles the additional display on the mod_cluster-manager main page. The default value is off , which causes only version information to display on the mod_cluster-manager main page. AllowCmd Toggles permissions for commands using mod_cluster-manager URL. The default value is on , which allows commands. ReduceDisplay Toggles the reduction of information displayed on the mod_cluster-manager page. Reducing the information allows more nodes to display on the page. The default value is off , which allows all the available information to display. MemManagerFile Defines the location for the files in which mod_manager stores configuration details. mod_manager also uses this location for generated keys for shared memory and lock files. This must be an absolute path name . It is recommended that this path be on a local drive, and not an NFS share. The default value is /logs/ . Maxcontext The maximum number of contexts that mod_proxy_cluster will use. The default value is 100 . Maxnode The maximum number of worker nodes that mod_proxy_cluster will use. The default value is 20 . Maxhost The maximum number of hosts (aliases) that mod_proxy_cluster will use. This is also the maximum number of load balancers. The default value is 20 . Maxsessionid The maximum number of active session identifiers stored. A session is considered inactive when no information is received from that session for five minutes. This is used for demonstration and debugging purposes only. The default value is 0 , which disables this logic. ManagerBalancerName The name of the load balancer to use when the worker node does not provide a load balancer name. The default value is mycluster . PersistSlots When set to on , nodes, aliases, and contexts are persisted in files. The default value is off . CheckNonce When set to on , session identifiers are checked to ensure that they are unique and have not occurred before. The default is on . Note Setting this directive to off can leave your server vulnerable to replay attacks. SetHandler mod_cluster-manager Defines a handler to display information about worker nodes in the cluster. This is defined in the Location element: In this situation, USDLOCATION was also defined as mod_cluster_manager . Consider the following guidelines when accessing the USDLOCATION that is defined in the Location element in your browser: Transferred corresponds to the POST data sent to the worker node. Connected corresponds to the number of requests that had been processed when this status page was requested. Sessions corresponds to the number of active sessions. This field is not present when Maxsessionid is 0 . C.2. Mod_proxy_cluster.so module and directives The Proxy Balancer Module, mod_proxy_cluster.so , handles the routing of requests to cluster nodes. The Proxy Balancer selects the appropriate node to forward the request to based on the application location in the cluster, the current state of each of the cluster nodes, and the Session ID (if a request is part of an established session). Configurable directives for mod_proxy_cluster.so You can also configure the following directives in the <VirtualHost> element to change the load balancing behavior. CreateBalancers Defines how load balancers are created in the Apache HTTP Server virtual hosts. The following values are valid in CreateBalancers : 0 : Create load balancers in all virtual hosts defined in Apache HTTP Server. Remember to configure the load balancers in the ProxyPass directive. 1 : Do not create balancers. When using this value, you must also define the load balancer name in ProxyPass or ProxyPassMatch . 2 : Create only the main server. This is the default value for CreateBalancers . UseAlias Defines whether to check that the defined Alias corresponds to the ServerName . The following values are valid for UseAlias : 0 : Ignore alias information from worker nodes. This is the default value for UseAlias . 1 : Verify that the defined alias corresponds to a worker node's server name. LBstatusRecalTime Defines the interval in seconds between the proxy calculating the status of a worker node. The default interval is 5 seconds. ProxyPassMatch; ProxyPass ProxyPass maps remote servers into the local server namespace. If the local server has an address such as http://local.com/ , the following ProxyPass directive converts a local request for http://local.com/requested/file1 into a proxy request for http://worker.local.com/file1 . ProxyPassMatch uses regular expressions to match local paths to which the proxied URL should apply. For either directive, ! indicates that a specified path is local, and a request for that path should not be routed to a remote server. For example, the following directive specifies that gif files should be served locally. UseNocanon Defines whether to forward the original URL path to the back end without modifications. The default value is Off . When the UseNocanon directive is set to Off , the proxy can forward modified URLs to the back end. However, if the back-end application expects the original URL path that the client requested, the modified URL path can lead to unexpected issues. When you set the UseNocanon directive to On , the proxy can forward the original URL path to the back end without any modifications. In this situation, the proxy behavior depends on whether you also define a context and a ProxyPass directive for the requested URL in the mod_proxy_cluster.conf file. A context is also known as a virtual host definition . Consider the following guidelines when you set the UseNocanon directive to On : If you define a context for the requested URL but you do not define a ProxyPass directive for this URL, the proxy uses the UseNocanon directive. If you define both a context and a ProxyPass directive for the requested URL, and the ProxyPass directive includes the nocanon flag, the proxy uses the nocanon flag and ignores the UseNocanon directive. If you define both a context and a ProxyPass directive for the requested URL, and the ProxyPass directive excludes the nocanon flag, the proxy ignores the UseNocanon directive. Note If you do not define a context for the requested URL, mod_proxy_cluster returns a 404 error. ResponseStatusCodeOnNoContext Defines the response status code that the server sends to the client when a ProxyPass or ProxyPassMatch directive does not have a matching context. The default value is 404 , which means that the server sends a Not Found error response by default. In JBCS 2.4.51 or earlier, when a ProxyPass or ProxyPassMatch directive did not have a matching context, the server sent a 503 Service Unavailable response by default. If you want to preserve the default behavior that was available in earlier releases, set the ResponseStatusCodeOnNoContext directive to 503 instead. Note If you specify a value other than a standard HTTP response code, the server access log shows the specified value but the server sends a 500 Internal Server Error response to the client. C.3. Mod_advertise.so module and directives The Proxy Advertisement Module, mod_advertise.so , broadcasts the existence of the proxy server via UDP multicast messages. The server advertisement messages contain the IP address and port number where the proxy is listening for responses from nodes that wish to join the load-balancing cluster. The mod_advertise module must be defined along with the mod_manager module in the VirtualHost element. In the following example, the identifier for the mod_advertise module is advertise_module : Configurable directives for mod_advertise.so The mod_advertise module is configurable by using the following directives: ServerAdvertise Defines how the advertising mechanism is used. The default value is Off . When set to Off , the proxy does not advertise its location. When set to On , the advertising mechanism is used to tell worker nodes to send status information to this proxy. You can also specify a host name and port with the following syntax: ServerAdvertise On http:// HOSTNAME : PORT / . This is only required when using a name-based virtual host, or when a virtual host is not defined. AdvertiseGroup Defines the multicast address to advertise on. The syntax is AdvertiseGroup ADDRESS : PORT , where ADDRESS must correspond to AdvertiseGroupAddress , and PORT must correspond to AdvertisePort in your worker nodes. If your worker node is JBoss EAP-based, and the -u switch is used at startup, the default AdvertiseGroupAddress is the value passed via the -u switch. The default value is 224.0.1.105:23364 . If a port is not specified, the port defaults to 23364 . AdvertiseFrequency The interval (in seconds) between multicast messages advertising the IP address and port. The default value is 10 . AdvertiseSecurityKey Defines a string that is used to identify mod_proxy_cluster in Apache HTTP Server. By default, this directive is not set and no information is sent. AdvertiseManagerUrl Defines the URL that the worker node should use to send information to the proxy server. By default this directive is not set and no information is sent. AdvertiseBindAddress Defines the address and port over which to send multicast messages. The syntax is AdvertiseBindAddress ADDRESS : PORT . This allows an address to be specified on machines with multiple IP addresses. The default value is 0.0.0.0:23364 . C.4. Mod_cluster_slotmem.so module The mod_cluster_slotmem.so module is a shared memory provider for creating and accessing a shared memory segment in which the data sets are organized in "slots". The mod_cluster_slotmem module does not require any configuration directives. C.5. Additional resources (or steps) Worker node configuration reference for mod_proxy_cluster

Commands:
LoadModule manager_module modules/mod_manager.so
<Location USDLOCATION> SetHandler mod_cluster-manager Require ip 127.0.0.1 </Location>
LoadModule proxy_cluster_module modules/mod_proxy_cluster.so
ProxyPass /requested/ http://worker.local.com/
ProxyPassMatch ^(/.*\.gif)USD !
LoadModule advertise_module modules/mod_advertise.so