I will show you how you can setup tomcat and apache in order to serve your cocoon application transparently from your webserver. I will use the jk comunication protocol, because this protocol is the default used in tomcat-4.1.* and it is supported down to ???
If you don't know, whether your webserver is setup with mod_jk please take a look at CocoonAndApache and AddMod_jk(in German) While the first link focusses on technical issues, the secnd link is more a cookbook approach, but at the moment it is completely written in german langage. I will translate this page and add it to the CocoonCompetenceCenter in a few days.
...
If you don't bother with peformance ad you don't want to make things too complex at the beginning you can simply run tomcat on port 80 instead of the default port 8080. If you do this, you can access tomcat as if it where the default HTTP server. I.e. the URL http://mycompany
would already be served by tomcat and if you already followed the approach in BeginnerDefaultContext you are done.
But this is not the recommended approach, because
Because all of this you may need to read on ...
For those who do not want to take the effort of using Apache's mod_jk as described in the next section (at least I could not get it to work) I recommend another solution. Using mod_proxy: It is really simple and pretty much does job, as far as I understand it (see also CocoonAndApache).
Simply add the following to lines to you Apache 'conf' file.
=== ===ProxyPass / http://localhost:8080/
=== ===ProxyPassReverse / http://localhost:8080/
As a result, Apache will forward all requests for /
to localhost:8080
and vice versa.
If you think doing it the proxy_way is not appropriate for your needs go ahead to the next section and use mod_jk.
The elimination of the port from the URL is more tricky, because now the Webserver comes into play. I assume, your webserver is already running under the standard HTTP port 80. So that your company site can be accessed via http://mycompany
Now what you have to do is to setup a comunication line between the webserver and tomcat. You can read the very comprehensive doc about this issue from apache. If you prefer to just set it up and don't bother, go on with this text. But be warned. I won't tell you anything about the concepts. If you fail, you have to go to the official docs!
$tomcatroot/conf
folder and edit server.xml<Connector className="org.apache.tomcat.service.PoolTcpConnector"> <Parameter name="handler" value="org.apache.tomcat.service.connector.Ajp13ConnectionHandler"/> <Parameter name="port" value="8090"/> </Connector> |
mod_jk.conf
and worker.properties
You can let tomcat create these files for you. I prefer to give you two sample files here, which you can cut/paste into your environment. These files are furnitured to be used with cocoon. Both files will be placed into your $apacheroot/conf folder:
The following snippet is the smallest possible definition. Please check all pathes and modify them for your environment:
<IfModule mod_jk.c> JkWorkersFile /etc/httpd/conf/workers.properties JkLogFile /var/log/httpd/mod_jk.log JkLogLevel error JkMount /cocoon cocoon JkMount /cocoon/ cocoon JkMount /cocoon/* cocoon </IfModule> |
Note, that with this definition all requests to /cocoon will be served fully from cocoon. You may want to add rules to serve static content from the server instead. If you want to know, how this works, please have a look at ???
sample worker.properties Please check all pathes and modify them for your environment:
workers.tomcat_home=/opt/tomcat/tomcat-4.1.18 workers.java_home=/opt/java/java-1.3.1 worker.list=cocoon worker.cocoon.port=8090 worker.cocoon.host=localhost worker.cocoon.type=ajp13 |
Note: You can define as many workers as you like. But don't forget to place them into the comma separated property worker.list
. Now you can mount different URL-spaces to different tomcat servers...
1.If your webserver does not come up, check the error logs of your webserver. You will get hints to what may go wrong.
1.If you get unexpected results while accessing your cocoon via your webserver, check that you really have specified the corect JkMount points.
1.If you get tons of error messages concerning illegal protocol errors, check that you reallyhave connected the to the tcp connector of your tomcat. Common error is to connect tp the HTTP-connector instead.
1.If still things go worng, you need to consult the apache and tomcat docs.