Version 3

    Setting up mod_jk with a firewall:

     

     

     

    Configuring workers.properties:

    # Define list of workers that will be used
    # for mapping requests
    # The configuration directives are valid
    # for the mod_jk version 1.2.18 and later
    #
    worker.list=loadbalancer,status
    
    # Define Node1
    # modify the host as your host IP or DNS name.
    worker.node1.port=8009
    #Using an IP prevents a DNS lookup
    worker.node1.host=192.168.1.2
    worker.node1.type=ajp13
    worker.node1.lbfactor=1
    worker.node1.connect_timeout=10000
    worker.node1.prepost_timeout=10000
    worker.node1.socket_keepalive=True
    
    # Define Node2
    # modify the host as your host IP or DNS name.
    worker.node2.port=8009
    worker.node2.host=192.168.1.3
    worker.node2.type=ajp13
    worker.node2.lbfactor=1
    worker.node2.connect_timeout=10000
    worker.node2.prepost_timeout=10000
    worker.node2.socket_keepalive=True
    
    # Load-balancing behaviour
    worker.loadbalancer.type=lb
    worker.loadbalancer.balance_workers=node1,node2
    
    # Status worker for managing load balancer
    worker.status.type=status
    

     

     

    socket_keepalive=true is the most important setting. connect_timeout and

    prepost_timeout are to "work-around" firewalls that

    ignore keepalives or close the connection for unknown reasons.

     

     

     

    Configuring server.xml:

    The main concern with server.xml is setting the connectionTimeout which

    sets the SO_TIMEOUT of the underlying socket.  So when a connection in

    Tomcat hasn't had a request in the amount of time specified by

    connectionTimeout, then the connection dies off.  Why is this a good

    thing?...because if the connection hasn't been used for a certain period of

    time then there is the chance that it is half-close on the mod_jk end.

    If the connection isn't closed there will be an inflation of threads

    which can over time hit the maxThreads count in Tomcat then Tomcat will

    not be able to accept any new connections.

     

    When setting connectionTimeout in Tomcat, mod_jk should also have

    connect_timeout/prepost_timeout set, which allows detection that the

    Tomcat connection has been closed and preventing a retry request.

     

     

    <Connector port="8009"
               address="${jboss.bind.address}"
               emptySessionPath="true"
               enableLookups="false"
               redirectPort="8443"
               protocol="AJP/1.3"
               maxThreads="200"
               connectionTimeout="60000"></Connector>
    

     

    Configuring Apache

     

    Make note that maxThreads for the AJP connection should coincide with

    the MaxClients set in Apache's httpd.conf.  MaxClients needs to be set

    in the correct module in Apache.  

     

     

    This can be determined by running httpd -V:

     

    # httpd -V
    
    Server version: Apache/2.2.3
    Server built:   Sep 11 2006 09:43:05
    Server's Module Magic Number: 20051115:3
    Server loaded:  APR 1.2.7, APR-Util 1.2.8
    Compiled using: APR 1.2.7, APR-Util 1.2.7
    Architecture:   32-bit
    Server MPM:     Prefork
      threaded:     no
        forked:     yes (variable process count)
    Server compiled with....
    -D APACHE_MPM_DIR="server/mpm/prefork"
    -D APR_HAS_SENDFILE
    -D APR_HAS_MMAP
    -D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
    -D APR_USE_SYSVSEM_SERIALIZE
    -D APR_USE_PTHREAD_SERIALIZE
    -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
    -D APR_HAS_OTHER_CHILD
    -D AP_HAVE_RELIABLE_PIPED_LOGS
    -D DYNAMIC_MODULE_LIMIT=128
    -D HTTPD_ROOT="/etc/httpd"
    -D SUEXEC_BIN="/usr/sbin/suexec"
    -D DEFAULT_PIDLOG="logs/httpd.pid"
    -D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
    -D DEFAULT_LOCKFILE="logs/accept.lock"
    -D DEFAULT_ERRORLOG="logs/error_log"
    -D AP_TYPES_CONFIG_FILE="conf/mime.types"
    -D SERVER_CONFIG_FILE="conf/httpd.conf"
    

     

    Which tells me the Server MPM is Prefork

     

    httpd.conf:

    <IfModule prefork.c>
    StartServers       8
    MinSpareServers    5
    MaxSpareServers   20
    MaxClients       200
    MaxRequestsPerChild  0
    </IfModule>
    

     

    Or if Apache is using worker, it is
    <IfModule worker.c>
    StartServers         2
    MaxClients         200
    MinSpareThreads     25
    MaxSpareThreads     75
    ThreadsPerChild     25
    MaxRequestsPerChild  0
    </IfModule>
    

     

    MaxRequestsPerChild is 0, this is the recommended value when using

    mod_jk as mod_jk keeps open persistent connections.  The key values in

    the above configuration are MaxClients and MaxRequestsPerChild, the rest

    of the values are left as default.  Note that MaxRequestsPerChild is

    recommended to be 0 however the value may need to be greater than 0

    depending on if Apache is used for other modules also, especially in the

    case of resource leakage.

     

     

     

     

    Referenced by: