tomcat-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Chong Yu Meng <chon...@cymulacrum.net>
Subject Re: Apache2, Tomcat5 and mod_jk2 configuration problems
Date Wed, 23 Jun 2004 14:09:13 GMT
Hi Ryan,

It sounds like an error similar to one Andrew Clute encountered on Red 
Hat Enterprise Linux 3 (apr_md5_final). I transcribed some of the steps 
he took here : http://cymulacrum.net/writings/tomcat5/a1375.html

Can you test it first ? If it works, I would like to add a comment to 
the document that says that the steps apply to Red Hat 9 as well.

Regards,
pascal chong


Ryan McConigley wrote:

>
>     Greetings,
>
>     I have a problem.  I am trying to get Tomcat (5.0.25), Apache 
> (2.0.49) and mod_jk2 (2.0.4) all to talk to each other under RedHat 9.0.
>
>     So far I can get Apache up and working on port 80 and Tomcat works 
> fine on port 8080.  However, my users want to be able to use .jsp 
> pages on their virtual hosts.
>
>     I did have it working fine on the old machine we had (Redhat 7.3, 
> Apache 1.3, Tomcat 4 and mod_jk) but we upgraded and now its not working.
>
>     One thing I have noticed is when Tomcat starts up there is the 
> message:
> INFO: APR not loaded, disabling jni components: java.io.IOException: 
> java.lang.UnsatisfiedLinkError: 
> /usr/local/httpd-2.0.49/modules/jkjni.so: 
> /usr/local/httpd-2.0.49/modules/jkjni.so: undefined symbol: apr_md5_final
>     
>     I assumed I was getting this because Apache was not compilied in 
> with apr support, so I recompiled it with --with-apr and 
> --with-apr-util.  Apache still works, but when I tried to recompile 
> mod_jk2 it tells me now that my apxs can not be found, even though 
> prior it was finding it ok and its quite clearly in the location 
> specified.
>
>     I'm not sure if that is a critical error or not or how to overcome 
> it.  I have been trying different compile options, but still not 
> getting much luck.
>
>     When you click on a .jsp page, all that happens is the browser 
> just sits there continually loading.  In the tomcat logs you get a 
> line which says "INFO: No next" and thats it.
>
>     Can anyone shed some light on my problem, before I do physical 
> harm to the box in question.  The configuration files are as 
> follows:   Also, can I have .jsp files enabled for some virtual 
> servers and not for others, or is it an all or nothing affair?
>
> ----------------------worker2.properties--------------------------------
> # workers2.properties
>
> # Shared memory handling. Needs to be set.
> [shm]
> info=Scoreboard.  Required for reconfiguration and status with 
> multiprocess servers
> file=/usr/local/tomcat/logs/jk2.shm
> size=1048576
> debug=0
> disabled=0
>
> #UNIX domain socket
> [channel.un:/usr/local/tomcat/work/jk2.socket]
> tomcatId=localhst:8009
> debug=0
>
> # define the worker
> #[ajp13:/usr/local/tomcat/work/jk2.socket]
> #chanel=channel.un:/usr/local/tomcat/work/jk2.socket
> [ajp13:localhost:8009]
> channel=channel.socket:localhost:8009
>
> # Announce a "status" worker
> pstatus:status]
> info=Status worker.  Displays runtime information.
>
> [uri:/jkstatus/*]
> group=status:status
>
> # Uri mapping
> [uri:/examples/*]
>
> [uri:projects.csse.uwa.edu.au/*.jsp]
> worker=ajp13:localhost:8009
> [uri:perth-agentcity.csse.uwa.edu.au/*.jsp]
> worker=ajp13:localhost:8009
>
> ---------------------------------------------------------------------------- 
>
> ---------------jk2_mod.conf (included in the apache.conf 
> file)--------------
> # Sample mod_jk2.conf  08-Feb-2004, located at:
> # http://www.gknw.com/development/apache/docs/win32/mod_jk2/mod_jk2x.conf
> #
> # Load the mod_jk2 module
> #
> LoadModule jk2_module modules/mod_jk2.so
>
> <IfModule mod_jk2.c>
>
>     #-----------------------------------------------
>     # Set the Apache2 logger level
>     #-----------------------------------------------
>     #
>     JkSet2 logger level debug
>
>     #-----------------------------------------------
>     # Set the alternate log file
>     #-----------------------------------------------
>     #
>     JkSet2 logger.file:0 file ${serverRoot}/logs/jk2.log
>     JkSet2 logger.file:0 level debug
>
>     #-----------------------------------------------
>     # Set the scoreboard file
>     #-----------------------------------------------
>     #
>     JkSet2 shm: file ${serverRoot}/logs/jk2.shm
>     JkSet2 shm: size 1048576
>
>     #-----------------------------------------------
>     # Where to find the workers2.properties file
>     #-----------------------------------------------
>     #
>     #JkSet config.file ${serverRoot}/conf/workers2.properties
>
>     #-----------------------------------------------
>     # Alternatively setup the workers here
>     #-----------------------------------------------
>     #
>     JkSet2 channel.socket:localhost:8009 info "Ajp13 forwarding over 
> socket"
>     JkSet2 status: info "Status worker, displays runtime information"
>     JkSet2 workerEnv: logger logger.file:0
>
>     #-----------------------------------------------
>     # Configure the /jkstatus handler
>     #-----------------------------------------------
>     #
>     <Location "/jkstatus">
>         JkUriSet group status:
>         JkUriSet info "Map the /jkstatus handler to the Web server uri 
> space"
>     </Location>
>
>     #-----------------------------------------------
>     # Configure Tomcat Example Applications
>     #-----------------------------------------------
>     #
>     <Location "/examples">
>         JkUriSet group lb:lb
>         JkUriSet info "Map the Tomcat examples to the Web server uri 
> space"
>     </Location>
>
>     #-----------------------------------------------
>     # Configure Tomcat Documentation
>     #-----------------------------------------------
>     #
>     <Location "/tomcat-docs">
>         JkUriSet group lb:lb
>         JkUriSet info "Map the Tomcat docs to the Web server uri space"
>     </Location>
>
> </IfModule>
>
> #
> ----------------------------------------------------------------------
> --------------   jk2.properties   ------------------------------------
> # jk2.properties
> # Configured for chennel UNIX
>
> # Set the desired handler list
> handler.list=spr,requiest,chennelUnix
>
> # UNIX Domain socket location
> chennelUnix.file=/usr/local/tomcat/work/jk2.socket
>
> # Dynamic library
> serverRoot=/etc/httpd
> apr.NativeSo=/usr/local/httpd/modules/jkjni.so
> ------------------------------------------------------------------------------- 
>
>
> ----------------------server.xml-------------------------------------------- 
>
> <!-- Example Server Configuration File -->
> <!-- Note that component elements are nested corresponding to their
>      parent-child relationships with each other -->
>
> <!-- A "Server" is a singleton element that represents the entire JVM,
>      which may contain one or more "Service" instances.  The Server
>      listens for a shutdown command on the indicated port.
>
>      Note:  A "Server" is not itself a "Container", so you may not
>      define subcomponents such as "Valves" or "Loggers" at this level.
>  -->
>
> <Server port="8005" shutdown="SHUTDOWN" debug="0">
>
>
>   <!-- Comment these entries out to disable JMX MBeans support -->
>   <!-- You may also configure custom components (e.g. Valves/Realms) by
>        including your own mbean-descriptor file(s), and setting the
>        "descriptors" attribute to point to a ';' seperated list of paths
>        (in the ClassLoader sense) of files to add to the default list.
>        e.g. descriptors="/com/myfirm/mypackage/mbean-descriptor.xml"
>   -->
>   <Listener 
> className="org.apache.catalina.mbeans.ServerLifecycleListener"
>             debug="0"/>
>   <Listener 
> className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener"
>             debug="0"/>
>
>   <!-- Global JNDI resources -->
>   <GlobalNamingResources>
>
>     <!-- Test entry for demonstration purposes -->
>     <Environment name="simpleValue" type="java.lang.Integer" value="30"/>
>
>     <!-- Editable user database that can also be used by
>          UserDatabaseRealm to authenticate users -->
>     <Resource name="UserDatabase" auth="Container"
>               type="org.apache.catalina.UserDatabase"
>        description="User database that can be updated and saved">
>     </Resource>
>     <ResourceParams name="UserDatabase">
>       <parameter>
>         <name>factory</name>
>         
> <value>org.apache.catalina.users.MemoryUserDatabaseFactory</value>
>       </parameter>
>       <parameter>
>         <name>pathname</name>
>         <value>conf/tomcat-users.xml</value>
>       </parameter>
>     </ResourceParams>
>
>   </GlobalNamingResources>
>
>   <!-- A "Service" is a collection of one or more "Connectors" that share
>        a single "Container" (and therefore the web applications visible
>        within that Container).  Normally, that Container is an "Engine",
>        but this is not required.
>
>        Note:  A "Service" is not itself a "Container", so you may not
>        define subcomponents such as "Valves" or "Loggers" at this level.
>    -->
>
>   <!-- Define the Tomcat Stand-Alone Service -->
>   <Service name="Catalina">
>
>     <!-- A "Connector" represents an endpoint by which requests are 
> received
>          and responses are returned.  Each Connector passes requests 
> on to the
>          associated "Container" (normally an Engine) for processing.
>
>          By default, a non-SSL HTTP/1.1 Connector is established on 
> port 8080.
>          You can also enable an SSL HTTP/1.1 Connector on port 8443 by
>          following the instructions below and uncommenting the second 
> Connector
>          entry.  SSL support requires the following steps (see the SSL 
> Config
>          HOWTO in the Tomcat 5 documentation bundle for more detailed
>          instructions):
>          * If your JDK version 1.3 or prior, download and install JSSE 
> 1.0.2 or
>            later, and put the JAR files into "$JAVA_HOME/jre/lib/ext".
>          * Execute:
>              %JAVA_HOME%\bin\keytool -genkey -alias tomcat -keyalg RSA 
> (Windows)
>              $JAVA_HOME/bin/keytool -genkey -alias tomcat -keyalg RSA  
> (Unix)
>            with a password value of "changeit" for both the 
> certificate and
>            the keystore itself.
>
>          By default, DNS lookups are enabled when a web application calls
>          request.getRemoteHost().  This can have an adverse impact on
>          performance, so you can disable it by setting the
>          "enableLookups" attribute to "false".  When DNS lookups are 
> disabled,
>          request.getRemoteHost() will return the String version of the
>          IP address of the remote client.
>     -->
>
>     <!-- Define a non-SSL Coyote HTTP/1.1 Connector on port 8080 -->
>     <Connector port="8080"
>                maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
>                enableLookups="false" redirectPort="8443" 
> acceptCount="100"
>                debug="0" connectionTimeout="20000"
>                disableUploadTimeout="true" />
>     <!-- Note : To disable connection timeouts, set connectionTimeout 
> value
>      to 0 -->
>
>         <!-- Note : To use gzip compression you could set the 
> following properties :
>
>                            compression="on"
>                            compressionMinSize="2048"
>                            noCompressionUserAgents="gozilla, traviata"
>                            compressableMimeType="text/html,text/xml"
>         -->
>
>     <!-- Define a SSL Coyote HTTP/1.1 Connector on port 8443 -->
>     <!--
>     <Connector port="8443"
>                maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
>                enableLookups="false" disableUploadTimeout="true"
>                acceptCount="100" debug="0" scheme="https" secure="true"
>                clientAuth="false" sslProtocol="TLS" />
>     -->
>
>     <!-- Define a Coyote/JK2 AJP 1.3 Connector on port 8009 -->
>     <Connector port="8009"
>                enableLookups="false" redirectPort="8443" debug="0"
>                protocol="AJP/1.3" />
>
>     <!-- Define a Proxied HTTP/1.1 Connector on port 8082 -->
>     <!-- See proxy documentation for more information about using 
> this. -->
>     <!--
>     <Connector port="8082"
>                maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
>                enableLookups="false"
>                acceptCount="100" debug="0" connectionTimeout="20000"
>                proxyPort="80" disableUploadTimeout="true" />
>     -->
>
>     <!-- An Engine represents the entry point (within Catalina) that 
> processes
>          every request.  The Engine implementation for Tomcat stand alone
>          analyzes the HTTP headers included with the request, and 
> passes them
>          on to the appropriate Host (virtual host). -->
>
>     <!-- You should set jvmRoute to support load-balancing via JK/JK2 
> ie :
>     <Engine name="Standalone" defaultHost="localhost" debug="0" 
> jvmRoute="jvm1">
>     -->
>
>     <!-- Define the top level container in our container hierarchy -->
>     <Engine name="Catalina" defaultHost="localhost" debug="0">
>
>       <!-- The request dumper valve dumps useful debugging information 
> about
>            the request headers and cookies that were received, and the 
> response
>            headers and cookies that were sent, for all requests 
> received by
>            this instance of Tomcat.  If you care only about requests to a
>            particular virtual host, or a particular application, nest 
> this
>            element inside the corresponding <Host> or <Context> entry 
> instead.
>
>            For a similar mechanism that is portable to all Servlet 2.4
>            containers, check out the "RequestDumperFilter" Filter in the
>            example application (the source for this filter may be 
> found in
>            "$CATALINA_HOME/webapps/examples/WEB-INF/classes/filters").
>
>            Request dumping is disabled by default.  Uncomment the 
> following
>            element to enable it. -->
>       <!--
>       <Valve className="org.apache.catalina.valves.RequestDumperValve"/>
>       -->
>
>       <!-- Global logger unless overridden at lower levels -->
>       <Logger className="org.apache.catalina.logger.FileLogger"
>               prefix="catalina_log." suffix=".txt"
>               timestamp="true"/>
>
>       <!-- Because this Realm is here, an instance will be shared 
> globally -->
>
>       <!-- This Realm uses the UserDatabase configured in the global JNDI
>            resources under the key "UserDatabase".  Any edits
>            that are performed against this UserDatabase are immediately
>            available for use by the Realm.  -->
>       <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
>                  debug="0" resourceName="UserDatabase"/>
>
>       <!-- Comment out the old realm but leave here for now in case we
>            need to go back quickly -->
>       <!--
>       <Realm className="org.apache.catalina.realm.MemoryRealm" />
>       -->
>
>       <!-- Replace the above Realm with one of the following to get a 
> Realm
>            stored in a database and accessed via JDBC -->
>
>       <!--
>       <Realm  className="org.apache.catalina.realm.JDBCRealm" debug="99"
>              driverName="org.gjt.mm.mysql.Driver"
>           connectionURL="jdbc:mysql://localhost/authority"
>          connectionName="test" connectionPassword="test"
>               userTable="users" userNameCol="user_name" 
> userCredCol="user_pass"
>           userRoleTable="user_roles" roleNameCol="role_name" />
>       -->
>
>       <!--
>       <Realm  className="org.apache.catalina.realm.JDBCRealm" debug="99"
>              driverName="oracle.jdbc.driver.OracleDriver"
>           connectionURL="jdbc:oracle:thin:@ntserver:1521:ORCL"
>          connectionName="scott" connectionPassword="tiger"
>               userTable="users" userNameCol="user_name" 
> userCredCol="user_pass"
>           userRoleTable="user_roles" roleNameCol="role_name" />
>       -->
>
>       <!--
>       <Realm  className="org.apache.catalina.realm.JDBCRealm" debug="99"
>              driverName="sun.jdbc.odbc.JdbcOdbcDriver"
>           connectionURL="jdbc:odbc:CATALINA"
>               userTable="users" userNameCol="user_name" 
> userCredCol="user_pass"
>           userRoleTable="user_roles" roleNameCol="role_name" />
>       -->
>
>       <!-- Define the default virtual host
>            Note: XML Schema validation will not work with Xerces 2.2.
>        -->
>       <Host name="localhost" debug="0" appBase="webapps"
>        unpackWARs="true" autoDeploy="true"
>        xmlValidation="false" xmlNamespaceAware="false">
>
>         <!-- Defines a cluster for this node,
>              By defining this element, means that every manager will 
> be changed.
>              So when running a cluster, only make sure that you have 
> webapps in there
>              that need to be clustered and remove the other ones.
>              A cluster has the following parameters:
>
>              className = the fully qualified name of the cluster class
>
>              name = a descriptive name for your cluster, can be anything
>
>              debug = the debug level, higher means more output
>
>              mcastAddr = the multicast address, has to be the same for 
> all the nodes
>
>              mcastPort = the multicast port, has to be the same for 
> all the nodes
>
>              mcastBindAddr = bind the multicast socket to a specific 
> address
>
>              mcastTTL = the multicast TTL if you want to limit your 
> broadcast
>
>              mcastSoTimeout = the multicast readtimeout
>
>              mcastFrequency = the number of milliseconds in between 
> sending a "I'm alive" heartbeat
>
>              mcastDropTime = the number a milliseconds before a node 
> is considered "dead" if no heartbeat is received
>
>              tcpThreadCount = the number of threads to handle incoming 
> replication requests, optimal would be the same amount of threads as 
> nodes
>
>              tcpListenAddress = the listen address (bind address) for 
> TCP cluster request on this host,
>                                 in case of multiple ethernet cards.
>                                 auto means that address becomes
>                                 
> InetAddress.getLocalHost().getHostAddress()
>
>              tcpListenPort = the tcp listen port
>
>              tcpSelectorTimeout = the timeout (ms) for the 
> Selector.select() method in case the OS
>                                   has a wakup bug in java.nio. Set to 
> 0 for no timeout
>
>              printToScreen = true means that managers will also print 
> to std.out
>
>              expireSessionsOnShutdown = true means that
>
>              useDirtyFlag = true means that we only replicate a 
> session after setAttribute,removeAttribute has been called.
>                             false means to replicate the session after 
> each request.
>                             false means that replication would work 
> for the following piece of code:
>                             <%
>                             HashMap map = 
> (HashMap)session.getAttribute("map");
>                             map.put("key","value");
>                             %>
>              replicationMode = can be either 'pooled', 'synchronous' 
> or 'asynchronous'.
>                                * Pooled means that the replication 
> happens using several sockets in a synchronous way. Ie, the data gets 
> replicated, then the request return. This is the same as the 
> 'synchronous' setting except it uses a pool of sockets, hence it is 
> multithreaded. This is the fastest and safest configuration. To use 
> this, also increase the nr of tcp threads that you have dealing with 
> replication.
>                                * Synchronous means that the thread 
> that executes the request, is also the
>                                thread the replicates the data to the 
> other nodes, and will not return until all
>                                nodes have received the information.
>                                * Asynchronous means that there is a 
> specific 'sender' thread for each cluster node,
>                                so the request thread will queue the 
> replication request into a "smart" queue,
>                                and then return to the client.
>                                The "smart" queue is a queue where when 
> a session is added to the queue, and the same session
>                                already exists in the queue from a 
> previous request, that session will be replaced
>                                in the queue instead of replicating two 
> requests. This almost never happens, unless there is a
>                                large network delay.
>         -->
>         <!--
>             When configuring for clustering, you also add in a valve 
> to catch all the requests
>             coming in, at the end of the request, the session may or 
> may not be replicated.
>             A session is replicated if and only if all the conditions 
> are met:
>             1. useDirtyFlag is true or setAttribute or removeAttribute 
> has been called AND
>             2. a session exists (has been created)
>             3. the request is not trapped by the "filter" attribute
>
>             The filter attribute is to filter out requests that could 
> not modify the session,
>             hence we don't replicate the session after the end of this 
> request.
>             The filter is negative, ie, anything you put in the 
> filter, you mean to filter out,
>             ie, no replication will be done on requests that match one 
> of the filters.
>             The filter attribute is delimited by ;, so you can't 
> escape out ; even if you wanted to.
>
>             filter=".*\.gif;.*\.js;" means that we will not replicate 
> the session after requests with the URI
>             ending with .gif and .js are intercepted.
>         -->
>
>         <!--
>         <Cluster 
> className="org.apache.catalina.cluster.tcp.SimpleTcpCluster"
>                  
> managerClassName="org.apache.catalina.cluster.session.DeltaManager"
>                  expireSessionsOnShutdown="false"
>                  useDirtyFlag="true">
>
>             <Membership
>                 
> className="org.apache.catalina.cluster.mcast.McastService"
>                 mcastAddr="228.0.0.4"
>                 mcastPort="45564"
>                 mcastFrequency="500"
>                 mcastDropTime="3000"/>
>
>             <Receiver
>                 
> className="org.apache.catalina.cluster.tcp.ReplicationListener"
>                 tcpListenAddress="auto"
>                 tcpListenPort="4001"
>                 tcpSelectorTimeout="100"
>                 tcpThreadCount="6"/>
>
>             <Sender
>                 
> className="org.apache.catalina.cluster.tcp.ReplicationTransmitter"
>                 replicationMode="pooled"/>
>
>             <Valve 
> className="org.apache.catalina.cluster.tcp.ReplicationValve"
>                    
> filter=".*\.gif;.*\.js;.*\.jpg;.*\.htm;.*\.html;.*\.txt;"/>
>         </Cluster>
>         -->
>
>
>
>         <!-- Normally, users must authenticate themselves to each web app
>              individually.  Uncomment the following entry if you would 
> like
>              a user to be authenticated the first time they encounter a
>              resource protected by a security constraint, and then 
> have that
>              user identity maintained across *all* web applications 
> contained
>              in this virtual host. -->
>         <!--
>         <Valve className="org.apache.catalina.authenticator.SingleSignOn"
>                    debug="0"/>
>         -->
>
>         <!-- Access log processes all requests for this virtual host.  By
>              default, log files are created in the "logs" directory 
> relative to
>              $CATALINA_HOME.  If you wish, you can specify a different
>              directory with the "directory" attribute.  Specify either 
> a relative
>              (to $CATALINA_HOME) or absolute path to the desired 
> directory.
>         -->
>         <!--
>         <Valve className="org.apache.catalina.valves.AccessLogValve"
>                  directory="logs"  prefix="localhost_access_log." 
> suffix=".txt"
>                  pattern="common" resolveHosts="false"/>
>         -->
>
>         <!-- Logger shared by all Contexts related to this virtual 
> host.  By
>              default (when using FileLogger), log files are created in 
> the "logs"
>              directory relative to $CATALINA_HOME.  If you wish, you 
> can specify
>              a different directory with the "directory" attribute.  
> Specify either a
>              relative (to $CATALINA_HOME) or absolute path to the desired
>              directory.-->
>         <Logger className="org.apache.catalina.logger.FileLogger"
>                  directory="logs"  prefix="localhost_log." suffix=".txt"
>             timestamp="true"/>
>
>       </Host>
>
>       <!-- perth-agentcity.csse.uwa.edu.au  -->
>       <Host name="perth-agentcity.csse.uwa.edu.au" debug="1"
>                 appBase="/home/projects/misc/perth-agentcity/public_html"
>                 unpackWARs="true">
>       <!--  <Alias>perth-agentcity.csse.uwa.edu.au</Alias>         -->
>
>         <!--<Valve 
> className="org.apache.catalina.authenticator.SingleSignOn"
>                    debug="0"/>
>          -->
>
>         <Logger className="org.apache.catalina.logger.FileLogger"
>                  directory="logs"  prefix="perth-agentlog." suffix=".txt"
>                 timestamp="true"/> -->
>
>         <!--  Root Context -->
>         <Context path="" docBase="" debug="1"/>
>
>       </Host>
>     </Engine>
>   </Service>
> </Server>
>
> ------------------------------------------------------------------------------- 
>
> -- 
>           Ryan McConigley - Systems Administrator                  _.-,
>      Computer Science   University of Western Australia        .--'  '-._
>        Tel: (+61 8) 6488 7082 - Fax: (+61 8) 6488 1089       _/`-  
> _      '.
> Ryan[@]csse.uwa.edu.au - http://www.csse.uwa.edu.au/~ryan  
> '----'._`.----. \
>                                                                      
> `     \;
>  "You're just jealous because the voices are talking to 
> me"                ;_\
>
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: tomcat-user-unsubscribe@jakarta.apache.org
> For additional commands, e-mail: tomcat-user-help@jakarta.apache.org
>
>
>


---------------------------------------------------------------------
To unsubscribe, e-mail: tomcat-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tomcat-user-help@jakarta.apache.org


Mime
View raw message