# Apache + Tomcat

## cca93014

Has ANYONE managed to get Tomcat 4.0 working with Apache 1.3? Using either mod_jk or mod_webapp??? I'm having whole heaps of trouble...Just wanted to know if it had been done, and if it had, if there are some sample config files some1 could post?

Thanks in advance (here's hoping   :Laughing:  )

Ben

----------

## cbrese

I just got it working today using mod_jk.  I have a few domain name so I'm using name based virtual hosts.  

I didn't compile mod_jk I just downloaded it from http://jakarta.apache.org/builds/jakarta-tomcat/release/v3.3.1/bin/linux/i386/mod_jk-3.3-ap13-eapi.so and put it in /usr/lib/apache-extramodules/.

Then I added this to /etc/apache/conf/apache.conf to load mod_jk

```

LoadModule jk_module            extramodules/mod_jk-3.3-ap13-eapi.so

AddModule mod_jk.c

```

Then I added this to /etc/apache/conf/apache.conf to configure mod_jk

```

###

### mod_jk

###

JkWorkersFile /opt/jakarta/tomcat/conf/workers.properties

JkLogFile /opt/jakarta/tomcat/logs/mod_jk.log

JkLogLevel debug

```

Then I setup my virtual hosts in /etc/apache/conf/apache.conf like this

```

<VirtualHost *>

    ServerName www.domain1.com

    ServerAlias domain1.com

    DocumentRoot /home/httpd/htdocs/domain1.com

    JkMount /*.jsp ajp13

</VirtualHost>

<VirtualHost *>

    ServerName www.domain2.com

    ServerAlias domain2.com

    DocumentRoot /home/httpd/htdocs/domain2.com

    JkMount /*.jsp ajp13

</VirtualHost>

```

That was all I changed in /etc/apache/conf/apache.conf

The next step is creating /opt/jakarta/tomcat/conf/workers.properties

This is what mine looks like

```

workers.tomcat_home=/opt/jakarta/tomcat

workers.java_home=/opt/sun-jdk-1.4.0

ps=/

worker.list=ajp12, ajp13

worker.ajp13.port=8009

worker.ajp13.host=localhost

worker.ajp13.type=ajp1

```

Then since I'm using virtual host I had to add them to /opt/jakarta/tomcat/conf/server.xml

```

    <Host name="www.domain1.com">

        <Context path="" docBase="/home/httpd/htdocs/domain1.com/" debug="0"/>

    </Host>

    <Host name="www.domain2.com">

        <Context path="" docBase="/home/httpd/htdocs/domain2.com/" debug="0"/>

    </Host>

```

I put both of these host elements above 

```

    <Host name="localhost" debug="0" appBase="webapps" unpackWARs="true">

```

You will have to start tomcat before starting apache.  I just modified /etc/init.d/apache to start/stop tomcat with apache

```

start() {

    ebegin "Starting tomcat"

    /opt/jakarta/tomcat/bin/startup.sh

    ebegin "Starting apache"

    start-stop-daemon --quiet --start --startas /usr/sbin/apache \

        --pidfile /var/run/apache.pid -- ${APACHE_OPTS}

    eend $?

}

stop() {

    ebegin "Stoping tomcat"

    /opt/jakarta/tomcat/bin/shutdown.sh

    ebegin "Stopping apache"

    start-stop-daemon --quiet --stop --pidfile /var/run/apache.pid

    eend $?

}

```

----------

## cca93014

Many thanks for your help. I'm ALMOST there! But I have one problem. 

I can get it working running Mozilla on my local gentoo box, (http://localhost/<webapp>) but not from my windows box on my internal lan. The dyndns name is set. If I try and browse to 

http://*****.dyndns.org/<webapp>

I get nothing. Just an entry in /var/log/apache/error.log:

[Tue Aug 20 10:54:57 2002] [error] [client 192.168.0.2] File does not exist: /home/httpd/htdocs/idiom/mainmenu.jsp

Relevant parts of apache.conf:

```

LoadModule jk_module            extramodules/mod_jk.so

...

AddModule mod_jk.c

...

<VirtualHost localhost>

    ServerName ***.gotdns.com

    JkMount /idiom ajp13

    JkMount /idiom/* ajp13

</VirtualHost>

```

workers.properties:

```

workers.tomcat_home=/opt/jakarta/tomcat

workers.java_home=/opt/sun-jdk-1.4.0

ps=/

worker.list=ajp12, ajp13

worker.ajp13.port=8009

worker.ajp13.host=benny.gotdns.com

worker.ajp13.type=ajp1

```

and server.xml

```

<Listener className="org.apache.ajp.tomcat4.config.ApacheConfig"  modJk="/etc/apache/extra

modules/mod_jk.so" jkDebug="info"  workersConfig="/opt/jakarta/tomcat/conf/workers.propert

ies"  jkLog="/opt/jakarta/tomcat/logs/mod_jk.log" />

...

<Listener className="org.apache.ajp.tomcat4.config.ApacheConfig" append="true" />

```

Any ideas? So glad to have got this far   :Laughing: 

----------

## cbrese

You might want to add ***.gotdns.com to your host file on the windows box.  I haven't done it for a while with windoze but if you search for lmhosts or host you should find it.  Then you have to reload your cache I think it done by entering nbtstat -R, but I'm not sure.

----------

## cca93014

It doesn't work from anywhere other than localhost...If I try a machine on a totally different netowrk it still fails with an apache file not found error...

----------

## cbrese

I just noticed this it looks like your Virtual Host is set up wrong

instead of this:

```

<VirtualHost localhost>

```

you should have this:

```

<VirtualHost *>

```

Did you add a host element to server.xml?

It should look something like:

```

    <Host name="***.gotdns.com">

        <Context path="" docBase="/home/httpd/htdocs/domain1.com/" debug="0"/>

    </Host>

```

Can you get it to work using the domain name on your local box?  You might have to add the domain name to /etc/hosts if you haven't alredy done so.

----------

## cca93014

Hi there,

MANY THANKS! It works. Good karma to you sir. I just needed to change the virtual host entry in apache.conf.

Is there any way we can add this knowledge to the Ebuild for tomcat/apache? It seems a shame if people have to go through the same problems, especially as IMHO apache and tomcat are quite a common configuration...

I'd be happy to post the diffs of my config files for apache and tomcat - I'm not running virtual hosts, you see, so they are slightly different from yours, but they work!

Thanks again.

----------

## stig

...and that's why apache refuses to start. I have loaded and added mod_jk-3.3-ap13-eapi.so without any problems, but it seems there is something missing....

This is what's getting apache to fall apart:

```

###

### mod_jk

###

JkWorkersFile /opt/jakarta/tomcat/conf/workers.properties

JkLogFile /opt/jakarta/tomcat/logs/mod_jk.log

JkLogLevel debug 

```

into apache.conf and: 

```

workers.tomcat_home=/opt/jakarta/tomcat

workers.java_home=/opt/sun-jdk-1.4.0

ps=/

worker.list=ajp12, ajp13

worker.ajp13.port=8009

worker.ajp13.host=localhost

worker.ajp13.type=ajp1 

```

into 

/opt/jakarta/tomcat/conf/workers.properties 

AND if that's not enought, this doesen't work (from Vhosts.conf):

```

JkMount /*.jsp ajp13

```

Inn all cases I am told that there is a syntaks error:

```

 * Starting apache...

Syntax error on line 55 of /etc/apache/conf/vhosts/Vhosts.conf:

Invalid command 'JkMount', perhaps mis-spelled or defined by a module not included in the server configuration                                            [ !! ]

```

----------

## gilxa1226

[quote="cca93014"]

I'd be happy to post the diffs of my config files for apache and tomcat - I'm not running virtual hosts, you see, so they are slightly different from yours, but they work!

Thanks again.[/quote]

I would greatly appreciate it if you would post the code that you used to get Tomcat to work.  I'm doing an independent study, and I need a functional Apache/Tomcat setup for the study.  Thanks in advance.

----------

## cca93014

OK. I put mod_jk.so into /etc/apache/extramodules

To /etc/apache/conf/apache.conf I added

```
LoadModule jk_module            extramodules/mod_jk.so

```

after the other LoadModule statements:

```
AddModule mod_jk.c

```

After the other AddModule statements. At the end of that file i added:

```
<VirtualHost *>

JkWorkersFile "/opt/jakarta/tomcat/conf/jk/workers.properties"

JkLogFile "/opt/jakarta/tomcat/logs/mod_jk.log"

JkLogLevel info

<VirtualHost *>

    ServerName my.full.domain.name

    JkMount /outreach ajp13

    JkMount /outreach/* ajp13

</VirtualHost>

```

And here is my tomcat workers file (/opt/jakarta/tomcat/conf/jk/workers.properties):

```
workers.tomcat_home=/opt/jakarta/tomcat

workers.java_home=/opt/sun-jdk-1.4.0

ps=/

#worker.list=ajp13, ajp14

worker.list=ajp13

worker.ajp13.port=8009

worker.ajp13.host=localhost

worker.ajp13.type=ajp13

worker.ajp13.lbfactor=1

#worker.ajp14.port=8010

#worker.ajp14.host=localhost

#worker.ajp14.type=ajp14

#worker.ajp14.secretkey=secret

#worker.ajp14.credentials=myveryrandomentropy

#worker.ajp14.lbfactor=1

worker.loadbalancer.type=lb

worker.loadbalancer.balanced_workers=ajp13

worker.inprocess.type=jni

worker.inprocess.class_path=$(workers.tomcat_home)$(ps)lib$(ps)tomcat.jar

worker.inprocess.cmd_line=start

worker.inprocess.jvm_lib=$(workers.java_home)$(ps)jre$(ps)lib$(ps)i386$(ps)server$(ps)libj

vm.so

worker.inprocess.stdout=$(workers.tomcat_home)$(ps)logs$(ps)inprocess.stdout

worker.inprocess.stderr=$(workers.tomcat_home)$(ps)logs$(ps)inprocess.stderr
```

and finally my tomcat 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">

<Listener className="org.apache.ajp.tomcat4.config.ApacheConfig"  modJk="/etc/apache/extramodules/mod_jk.so" jkDebug="info"  workersConfig="/opt/jakarta/tomcat/conf/workers.properties"  jkLog="/opt/jakarta/tomcat/logs/mod_jk.log" /> 

  <!-- 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="Tomcat-Standalone">

    <!-- 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 4.0 documentation bundle for more detailed

         instructions):

         * 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 HTTP/1.1 Connector on port 8080 -->

    <Connector className="org.apache.catalina.connector.http.HttpConnector"

               port="8080" minProcessors="5" maxProcessors="75"

               enableLookups="true" redirectPort="8443"

               acceptCount="10" debug="0" connectionTimeout="60000"/>

    <!-- Note : To disable connection timeouts, set connectionTimeout value 

     to -1 -->

    <!-- Define a non-SSL Coyote HTTP/1.1 Connector on port 8081 -->

    <!--

    <Connector className="org.apache.coyote.tomcat4.CoyoteConnector"

               port="8081" minProcessors="5" maxProcessors="75"

               enableLookups="true" redirectPort="8443"

               acceptCount="10" debug="0" connectionTimeout="20000"/>

    -->

    <!-- Define an SSL HTTP/1.1 Connector on port 8443 -->

    <!--

    <Connector className="org.apache.catalina.connector.http.HttpConnector"

               port="8443" minProcessors="5" maxProcessors="75"

               enableLookups="true"

          acceptCount="10" debug="0" scheme="https" secure="true">

      <Factory className="org.apache.catalina.net.SSLServerSocketFactory"

               clientAuth="false" protocol="TLS"/>

    </Connector>

    -->

    <!-- Define an AJP 1.3 Connector on port 8009 -->

    <Connector className="org.apache.ajp.tomcat4.Ajp13Connector"

               port="8009" minProcessors="5" maxProcessors="75"

               acceptCount="10" debug="0"/>

    <!-- Define a Proxied HTTP/1.1 Connector on port 8081 -->

    <!-- See proxy documentation for more information about using this. -->

    <!--

    <Connector className="org.apache.catalina.connector.http.HttpConnector"

               port="8082" minProcessors="5" maxProcessors="75"

               enableLookups="true"

               acceptCount="10" debug="0" connectionTimeout="60000"

               proxyPort="80"/>

    -->

    <!-- Define a non-SSL HTTP/1.0 Test Connector on port 8082 -->

    <!--

    <Connector className="org.apache.catalina.connector.http10.HttpConnector"

               port="8083" minProcessors="5" maxProcessors="75"

               enableLookups="true" redirectPort="8443"

               acceptCount="10" debug="0"/>

    -->

    <!-- 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). -->

    <!-- Define the top level container in our container hierarchy -->

    <Engine name="Standalone" 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.3

           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 -->

      <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?user=test;password=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?user=scott;password=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 -->

      <Host name="localhost" debug="0" appBase="webapps" unpackWARs="true">

      <Listener className="org.apache.ajp.tomcat4.config.ApacheConfig" append="true" />

        <!-- 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"/>

        <!-- 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"/>

        <!-- Define properties for each web application.  This is only needed

             if you want to set non-default properties, or have web application

             document roots in places other than the virtual host's appBase

             directory.  -->

        <!-- Tomcat Root Context -->

        <!--

          <Context path="" docBase="ROOT" debug="0"/>

        -->

        <!-- Tomcat Manager Context -->

        <Context path="/manager" docBase="manager" 

         debug="0" privileged="true"/>

        <!-- Tomcat Examples Context -->

        <Context path="/examples" docBase="examples" debug="0"

                 reloadable="true" crossContext="true">

          <Logger className="org.apache.catalina.logger.FileLogger"

                     prefix="localhost_examples_log." suffix=".txt"

             timestamp="true"/>

          <Ejb   name="ejb/EmplRecord" type="Entity"

                 home="com.wombat.empl.EmployeeRecordHome"

               remote="com.wombat.empl.EmployeeRecord"/>

          <!-- PersistentManager: Uncomment the section below to test Persistent 

             Sessions.

                         

               saveOnRestart: If true, all active sessions will be saved

                 to the Store when Catalina is shutdown, regardless of

                 other settings. All Sessions found in the Store will be 

                 loaded on startup. Sessions past their expiration are

                 ignored in both cases.

               maxActiveSessions: If 0 or greater, having too many active 

                 sessions will result in some being swapped out. minIdleSwap

                 limits this. -1 means unlimited sessions are allowed.

                 0 means sessions will almost always be swapped out after

                 use - this will be noticeably slow for your users.

               minIdleSwap: Sessions must be idle for at least this long

                 (in seconds) before they will be swapped out due to 

               maxActiveSessions. This avoids thrashing when the site is 

                 highly active. -1 or 0 means there is no minimum - sessions

                 can be swapped out at any time.

               maxIdleSwap: Sessions will be swapped out if idle for this

                 long (in seconds). If minIdleSwap is higher, then it will

                 override this. This isn't exact: it is checked periodically.

                 -1 means sessions won't be swapped out for this reason,

                 although they may be swapped out for maxActiveSessions.

                 If set to >= 0, guarantees that all sessions found in the

                 Store will be loaded on startup.

               maxIdleBackup: Sessions will be backed up (saved to the Store,

                 but left in active memory) if idle for this long (in seconds), 

                 and all sessions found in the Store will be loaded on startup.

                 If set to -1 sessions will not be backed up, 0 means they

                 should be backed up shortly after being used.

               To clear sessions from the Store, set maxActiveSessions, maxIdleSwap,

               and minIdleBackup all to -1, saveOnRestart to false, then restart 

               Catalina.

          -->

        <!--

          <Manager className="org.apache.catalina.session.PersistentManager"

              debug="0"

              saveOnRestart="true"

              maxActiveSessions="-1"

              minIdleSwap="-1"

              maxIdleSwap="-1"

              maxIdleBackup="-1">

                <Store className="org.apache.catalina.session.FileStore"/>

          </Manager>

        -->

          <Environment name="maxExemptions" type="java.lang.Integer"

                      value="15"/>

          <Parameter name="context.param.name" value="context.param.value"

                     override="false"/>

          <Resource name="jdbc/EmployeeAppDb" auth="SERVLET"

                    type="javax.sql.DataSource"/>

          <ResourceParams name="jdbc/EmployeeAppDb">

            <parameter><name>user</name><value>sa</value></parameter>

            <parameter><name>password</name><value></value></parameter>

            <parameter><name>driverClassName</name>

              <value>org.hsql.jdbcDriver</value></parameter>

            <parameter><name>driverName</name>

              <value>jdbc:HypersonicSQL:database</value></parameter>

          </ResourceParams>

          <Resource name="mail/Session" auth="Container"

                    type="javax.mail.Session"/>

          <ResourceParams name="mail/Session">

            <parameter>

              <name>mail.smtp.host</name>

              <value>localhost</value>

            </parameter>

          </ResourceParams>

        </Context>

      </Host>

    </Engine>

  </Service>

  <!-- The MOD_WEBAPP connector is used to connect Apache 1.3 with Tomcat 4.0

       as its servlet container. Please read the README.txt file coming with

       the WebApp Module distribution on how to build it.

       (Or check out the "jakarta-tomcat-connectors/webapp" CVS repository)

       To configure the Apache side, you must ensure that you have the

       "ServerName" and "Port" directives defined in "httpd.conf".  Then,

       lines like these to the bottom of your "httpd.conf" file:

         LoadModule webapp_module libexec/mod_webapp.so

         WebAppConnection warpConnection warp localhost:8008

         WebAppDeploy examples warpConnection /examples/

       The next time you restart Apache (after restarting Tomcat, if needed)

       the connection will be established, and all applications you make

       visible via "WebAppDeploy" directives can be accessed through Apache.

  -->

  <!-- Define an Apache-Connector Service -->

  <Service name="Tomcat-Apache">

    <Connector className="org.apache.catalina.connector.warp.WarpConnector"

     port="8008" minProcessors="5" maxProcessors="75"

     enableLookups="true" appBase="webapps"

     acceptCount="10" debug="0"/>

    <!-- Replace "localhost" with what your Apache "ServerName" is set to -->

    <Engine className="org.apache.catalina.connector.warp.WarpEngine"

     name="Apache" debug="0">

      <!-- Global logger unless overridden at lower levels -->

      <Logger className="org.apache.catalina.logger.FileLogger"

              prefix="apache_log." suffix=".txt"

              timestamp="true"/>

      <!-- Because this Realm is here, an instance will be shared globally -->

      <Realm className="org.apache.catalina.realm.MemoryRealm" />

    </Engine>

  </Service>

</Server>

```

Maybe you can just diff it to your one...

Let me know how you go...

----------

## OmniVector

hmm i follwed all the directions i could find in this post, and can't run jsp pages.

mod_jk loads no problem, however i have two problems thus far.

when running a jsp page i get a 500 internal server error. i double checked by running a simple script

```

<%

out.println("Testing");

%>

```

and whenever i stop apache, catalina does this:

```

* Stopping tomcat...

Using CATALINA_BASE:   /opt/jakarta/tomcat

Using CATALINA_HOME:   /opt/jakarta/tomcat

Using CATALINA_TMPDIR: /opt/jakarta/tomcat/temp

Using JAVA_HOME:       /opt/sun-jdk-1.4.1.01

Catalina.stop: java.net.ConnectException: Connection refused

java.net.ConnectException: Connection refused

   at java.net.PlainSocketImpl.socketConnect(Native Method)

   at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:305)

   at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:171)

   at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:158)

   at java.net.Socket.connect(Socket.java:426)

   at java.net.Socket.connect(Socket.java:376)

   at java.net.Socket.<init>(Socket.java:291)

   at java.net.Socket.<init>(Socket.java:119)

   at org.apache.catalina.startup.Catalina.stop(Catalina.java:831)

   at org.apache.catalina.startup.Catalina.execute(Catalina.java:683)

   at org.apache.catalina.startup.Catalina.process(Catalina.java:179)

   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

   at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

   at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

   at java.lang.reflect.Method.invoke(Method.java:324)

   at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:243)

 * Stopping apache...                                                       [ ok ]

```

here is my setup:

running mod_ssl, with the appropriate mod_ssl version of mod_jk

apache.conf:

```

LoadModule jk_module    extramodules/mod_jk.so

...

AddModule mod_jk.c

...

# tomcat settings

JkWorkersFile /opt/jakarta/tomcat/conf/workers.properties

JkLogFile /opt/jakarta/tomcat/logs/mod_jk.log

JkLogLevel info 

...

NameVirtualHost 111.222.333.444

<VirtualHost server.halo43.com www.server.halo43.com>

        ServerName www.server.halo43.com

        ServerAlias server.halo43.com

        User user1

        Group web

        DocumentRoot /home/httpd/users/user1/public_html

        JkMount /*.jsp ajp13

</VirtualHost>

```

workers.properties:

```

workers.tomcat_home=/opt/jakarta/tomcat

workers.java_home=/opt/sun-jdk-1.4.1.01

ps=/

workers.list=ajp12, ajp13

worker.ajp13.port=8009

worker.ajp13.host=localhost

worker.ajp13.type=ajp1

```

server.xml:

```

...

<Server port="8005" shutdown="SHUTDOWN" debug="0">

  <Listener className="org.apache.ajp.tomcat4.config.ApacheConfig" modJk="/etc/apache/extramodules/mod_jk.so" jkDebug="info" workersConfig="/opt/jakarta/tomcat/conf/workers.properties" jkLog="/opt/jakarta/tomcat/logs/mod_jk.log" />

...

<Host name="www.server.halo43.com">

     <Context path="" docbase="/home/httpd/users/user1/public_html/" debug="0" />

</Host>

...

```

if anyone knows how i can get it working please post!

----------

## knox

I am having some troubles getting apache and tomcat to work the way I want as well.

I am wondering if anyone with a working config is actually deploying webapps that are located outside their document root.  I can make it work with a virtualhost setup with doc root of "/home/user/htdocs" and just doing JkMount /*.jsp ajp13.  But all that gets you is a single tree of documents that can use jsps.

What I want to do is to use webapps that are deployed in their own space and mapped into the document tree.  So from the same example I would have "/home/user/webapps/" which contains all of the webapps I am using.  And then I can deploy and undeploy the webapps as I wish either manually or using the manager interface.  This is also a better setup for development of webapps, so you can use "ant".

My problem seems to be that whenever I try and access a webapp that was deployed from somewhere outside the normal doc tree then apache just says "403 Forbidden"  or can't find the docs.  I tried adding a bunch of <Directory> permissions in the apache config, but nothing has worked yet.

Has anyone gotten this to work?

----------

## green_buddy

So I was able to get this working but only slightly... I want to have all my content in docroot and then have the jsp stuff forwarded and processed by tomcat... I think that should be possible... So basically what I'm looking for is to have *.html and *.jsp files underneath my docroot directory in apache and then still have my jsp files processed by the tomcat servlet engine.

Any guidance?

Thanks,

-green

----------

## igu

for those of you that are running tomcat4.x you might want to be using the following ajp module:

http://jakarta.apache.org/builds/jakarta-tomcat-connectors/jk/release/v1.2.1/bin/linux/i386/mod_jk-1.3-eapi.so

That took care of alot of problems for me   :Very Happy: 

----------

## green_buddy

Hey all,

So I got this up and running, but not processing the jsp pages the way I liked, and then I found out that tomcat handles virtual hosting just fine, which is what I really was going to use apache for anyway.  However, since tomcat handles it the way I like, there was no reason for me to have apache on the front end.  Most of my content won't be static, but even if it was, I don't doubt that tomcat could handle it speadily enough. 

Anyway, just a thought, if you're having problems dealing with the apache/tomcat connector via mod_jk or mod_webapp you might want to re-evaluate your architecture and take a good, long, hard look at what necessitates you to have apache up front at all.

Good luck,

-green

----------

## absinthe

 *green_buddy wrote:*   

> Anyway, just a thought, if you're having problems dealing with the apache/tomcat connector via mod_jk or mod_webapp you might want to re-evaluate your architecture and take a good, long, hard look at what necessitates you to have apache up front at all.

 

This is a good point, which I also often make to people.  If you don't have a specific reason to run Apache (e.g., you run a lot of PHP or need mod_perl, or something) ... then don't bother with it.  Run Tomcat/Orion/Resin by itself instead.

----------

## RikBlankestijn

You people seem to be quite knowledgeable on tomcat stuff, can you maybe please take a look at my tomcat issue? Deploy java application with Ant on Tomcat, annoying problem

----------

## `djinn`

I have been beating my head against the wall trying to figure out how to remove the "Servlet-Engine" header sent when a Servlet is asked for. Tomcat is running under Apache and I really am stumped. I know there has to be a way, other than using a proxy. Ideas? Any ideas would be greatly helpful  :Smile:  Thanks!

DjinN,

----------

