Apache

21
[email protected] 1 CIS 5930-04 – Spring 2001 http://aspen.csit.fsu.edu/it1spring01 Instructors: Geoffrey Fox , Bryan Carpenter Computational Science and Information Technology Florida State University Special Topic: Apache and Tomcat

Transcript of Apache

Page 1: Apache

[email protected] 1

CIS 5930-04 – Spring 2001

http://aspen.csit.fsu.edu/it1spring01

Instructors: Geoffrey Fox , Bryan CarpenterComputational Science and Information

TechnologyFlorida State University

Special Topic: Apache and Tomcat

Page 2: Apache

[email protected] 2

The Apache Project

The Apache Project is a collaborative software development effort.

Its goal is to produce a robust, commercial-grade, free HTTP server.

The project is run by volunteers—the Apache Group—communicating and planning through the Internet.

Organizational support is provided by the Apache Software Foundation.

Home page:

http://apache.org

Page 3: Apache

[email protected] 3

Foundation Myths Long ago, when the Web was young, the most famous

Web server in the World was called the NCSA server. It was developed by Rob McCool at the National

Center for Supercomputing Applications. McCool left NCSA in 1994, and development of the

public-domain NCSA server temporarily faltered. At that time, a group of eight powerful Webmasters

had developed their own extensions and bug-fixes for the NCSA server.

The founding Webmasters—brought together by email—pooled their updates.

“Apache” came into being early in 1995. It was a series of “patches” to the NCSA code.

A year later, Apache was the most popular Web server.

Page 4: Apache

[email protected] 4

Apache and Tomcat

This “lecture” is mainly a how-to guide to installing the Apache server and integrating it with the current version of Tomcat.

This allows a site primarily served by Apache to seamlessly make servlet and JSP content available.

Page 5: Apache

[email protected] 5

Obtaining Apache for Linux

Go to httpd.apache.org and follow the “download” link.

Negotiate folders through to binaries/linux.– Or go directly to

httpd.apache.org/dist/binaries/linux

At the time of writing, the relevant file was apache_1.3.14-i686-whatever-linux2.tar.gz

Page 6: Apache

[email protected] 6

Installing the Apache Server

Unpack the distribution:

gunzip -c apache_1.3.14-i686-whatever-linux2.tar.gz | tar xvf -

– You can do this step anywhere, e.g. in the /tmp directory.

Go into the created apache_1.3.4 directory and run

./install-bindist.sh

– I will assume you are logged in as root.– It should be straightforward to install as an ordinary

user, but you need to ensure the Apache home directory is set to somewhere in your own home directory. Read the INSTALL.bindist file.

Page 7: Apache

[email protected] 7

The Installation Script

If successful, you will probably see a message something like:

Installing binary distribution for platform i686-whatever-linux2 into directory /usr/local/apache ... Ready. +--------------------------------------------------------+ | You now have successfully installed the Apache 1.3.14 | | HTTP server. To verify that Apache actually works | | correctly you should first check the (initially | | created or preserved) configuration files: | | | | /usr/local/apache/conf/httpd.conf | | | You should then be able to immediately fire up | | Apache the first time by running: | | | | /usr/local/apache/bin/apachectl start | | | Thanks for using Apache. The Apache Group | | http://www.apache.org/ | +--------------------------------------------------------+

Page 8: Apache

[email protected] 8

Customize the Configuration File

If you wish, edit the file /usr/local/apache/conf/httpd.conf

The most likely changes you will need to make at this stage are to the document root.

For example I changed the lines: DocumentRoot “/usr/local/apache/htdocs”

to DocumentRoot “/home/httpd/html”

and <Directory “/usr/local/apache/htdocs”>

to <Directory “/home/httpd/html”>

If you are not installing as root, you will also need to change the line “Port 80” to specify a port above 1024.

Page 9: Apache

[email protected] 9

Starting and Stopping the Server

As the installation script said, you can start the httpd server program by the command: /usr/local/apache/bin/apachectl start

Logically enough, you can stop it by: /usr/local/apache/bin/apachectl stop

Page 10: Apache

[email protected] 10

Tomcat vs. Apache

The Apache Web server – is faster than Tomcat when it comes to static pages,– is more configurable than Tomcat,– is more robust than Tomcat, and– it supports CGI scripts, Server API modules, Perl, PHP,

etc.

Hence for real world sites, Apache would generally be a better choice than Tomcat, except that. . .– In itself, Apache doesn’t support Servlets or JavaServer

Pages!

Page 11: Apache

[email protected] 11

Integrating Apache and Tomcat

The solution, of course, is to allow the two Web servers to work together.

The Apache server will be the principal server, dealing with static documents.– Or dynamic documents generated by any of the other

technologies mentioned in the previous slide.

Apache will forward requests for Servlets or JavaServer Pages to Tomcat.

The approach we describe here is what was called the “out-of-process servlet container” the lectures on Servlets.

Page 12: Apache

[email protected] 12

Out-of-Process Servlet Container

Browser

Apache

ClientServerTomcat

ServletRequest

80

8007

ServletRequest

HTTP

AJP

Page 13: Apache

[email protected] 13

The Adapter

For Apache to communicate with Tomcat, and forward requests as necessary, it needs some extra software—an “adapter”.

An adapter will be implemented as an Apache module.– An Apache module is a piece of code that can be optionally

linked in to (or left out of) the main server code.– Non-standard, plug-in, modules will typically be shared-

object libraries (DLLs under Windows).– These live in a directory called /usr/local/apache/libexec.

Apache modules generally have names of the form mod_XXXX– For example, mod_perl.

There are two Tomcat adapter modules in common use: mod_jserv and mod_jk.

Page 14: Apache

[email protected] 14

mod_jk

mod_jk is a new Tomcat-Apache plug-in that handles communication between Tomcat and Apache.– It replaces the older mod_jserv.

For more information, see the file doc/mod_jk-howto.html in the Tomcat release, which is also online at

jakarta.apache.org/tomcat/jakarta-tomcat/src/doc/mod_jk-howto.html

For now the only way to obtain the mod_jk library for Linux seems to be to build it yourself. The sources are included in the source release of Tomcat.

Page 15: Apache

[email protected] 15

Obtaining mod_jk for Linux

Go to jakarta.apache.org and follow the “Source Code” link.

Get the release build of Tomcat (currently 3.2). At the time of writing, the relevant file is jakarta-tomcat-3.2-src.tar.gz

Unpack the distribution:

gunzip -c jakarta-tomcat-3.2-src.tar.gz | tar xvf -

– You can do this anywhere, e.g. in /tmp.– I do not particularly recommend you try to rebuild the

Tomcat server itself from this release: it is much easier just to download the compiled, “binary” version of the server, as described in the lectures on Servlets.

Page 16: Apache

[email protected] 16

Building mod_jk

Go to the directory jakarta-tomcat-3.2-src/src/native/apache1.3

If necessary, edit the definition of the macro APXS in Makefile.linux so that it refers to the apxs command in the Apache release, probably /usr/local/apache/bin/apxs.

Build the library: make -f Makefile.linux

Install the plug-in in the Apache libexec/ directory, e.g.: cp mod_jk.so /usr/local/apache/libexec

Page 17: Apache

[email protected] 17

Updating the Apache Configuration

In the first instance (until you need to do something clever) this is very easy, because whenever the Tomcat server is run, it generates a self-describing “include” file.– This file contains a series of Apache configuration-file

commands.

The include file is in jakarta-tomcat-X.X/conf/mod_jk.conf-auto

In my case I added the line include

/home/users/dbc/jakarta-tomcat-3.2/conf/mod_jk.conf-auto

to the end of the file /usr/local/apache/conf/httpd.conf.

Page 18: Apache

[email protected] 18

Fragment of the File mod_jk.conf-auto###############################################

########### Auto configuration for the /dbc context starts.###############################################

########### The following line makes apache aware of the location of the /dbc

contextAlias /dbc "/home/users/dbc/jakarta-tomcat-3.2/webapps/dbc"<Directory "/home/users/dbc/jakarta-tomcat-3.2/webapps/dbc"> Options Indexes FollowSymLinks</Directory>

# The following line mounts all JSP files and the /servlet/ uri to tomcatJkMount /dbc/servlet/* ajp12JkMount /dbc/*.jsp ajp12

# The following line prohibits users from directly accessing WEB-INF<Location "/dbc/WEB-INF/"> AllowOverride None deny from all</Location>

# The following line prohibits users from directly accessing META-INF<Location "/dbc/META-INF/"> AllowOverride None deny from all</Location>

Page 19: Apache

[email protected] 19

Remarks

Recall these are commands that Tomcat generates to configure Apache.

As the first comments indicates, these commands relate to the servlet context called dbc/.

The Alias command causes Apache to generally look in the Tomcat document directory for URLs with paths that start /dbc.– This is needed for static documents in the Tomcat directory.

The first JkMount command causes URLs with paths that match the pattern /dbc/servlet/* to be redirected to the AJP module (hence the Tomcat server).

The second JkMount command causes URLs with paths that match the pattern /dbc/*.jsp to be similarly redirected Tomcat server.

Page 20: Apache

[email protected] 20

Configuring “Workers” In Tomcat 3.2, the generated include file, jakarta-

tomcat-X.X/conf/mod_jk.conf-auto has a reference to the file workers.properties in the same directory. You will probably have to manually edit this file.

Enclosed comments are fairly self-explanatory. If necessary change the Java home directory and the path-component separator (to / rather than \ for Linux).

You may also need to choose one or the other of ajp12 and ajp13, and comment out references to the other.– I went with ajp12. ajp13 is supposed to be an improved

protocol, but I know and love ajp12. Set the port number for your AJP connector, as specified

in server.xml. See jakarta-tomcat-X.X/doc/Tomcat-Workers-

HowTo.html.

Page 21: Apache

[email protected] 21

Start the Apache Server. . .

In principle, we are done. Restart the Apache server.

With the default configuration, URLs with paths in Tomcat servlet contexts that start /servlet or end with .jsp are redirected to Tomcat.– Note Apache will directly serve static .html pages,

even if they are in the Tomcat document directory.– Because Apache (unlike Tomcat) runs as user nobody

by default, such files now need to be world readable.

(Apparently) things continue to work across multiple restarts of Tomcat, even without restarting Apache.– We note however that, according to the FAQ, this is not

the case with AJP13. . .