APACHE INSTALLATION | |
Introduction | |
============ | |
Apache 2.0's configuration and installation environment has changed | |
completely from Apache 1.3. Apache 1.3 used a custom set of scripts | |
to achieve easy installation. Apache 2.0 now uses libtool and | |
autoconf to create an environment that looks like many other Open | |
Source projects. | |
Installing the Apache 2.0 HTTP server | |
===================================== | |
1. Overview for the impatient | |
-------------------------- | |
$ ./configure --prefix=PREFIX | |
$ make | |
$ make install | |
$ PREFIX/bin/apachectl start | |
NOTE: PREFIX is not the string "PREFIX". Instead use the Unix | |
filesystem path under which Apache should be installed. For | |
instance use "/usr/local/apache" for PREFIX above. | |
NOTE: if you are building from a copy of the Apache CVS | |
repository, rather than a release distribution, then you | |
must use the "buildconf" script before running configure. | |
2. Requirements | |
------------ | |
The following requirements exist for building Apache: | |
o Disk Space: | |
Make sure you have approximately 12 MB of temporary free disk | |
space available. After installation Apache occupies | |
approximately 5 MB of disk space (the actual required disk | |
space depends on the amount of compiled in third party | |
modules, etc). | |
o ANSI-C Compiler: | |
Make sure you have an ANSI-C compiler installed. The GNU C | |
compiler (GCC) from the Free Software Foundation (FSF) is | |
recommended (version 2.7.2 is fine). If you don't have GCC | |
then at least make sure your vendors compiler is ANSI | |
compliant. You can find the homepage of GNU at | |
http://www.gnu.org/ and the GCC distribution under | |
http://www.gnu.org/order/ftp.html . | |
o Perl 5 Interpreter [OPTIONAL]: | |
For some of the support scripts like `apxs' or `dbmmanage' | |
(which are written in Perl) the Perl 5 interpreter is required | |
(versions 5.003 and 5.004 are fine). If no such interpreter is | |
found by the `configure' script this is no harm. Of | |
course, you still can build and install Apache 2.0. Only those | |
support scripts cannot be used. If you have multiple Perl | |
interpreters installed (perhaps a Perl 4 from the vendor and a | |
Perl 5 from your own), then it is recommended to use the | |
--with-perl option (see below) to make sure the correct one is | |
selected by ./configure. | |
o Dynamic Shared Object (DSO) support [OPTIONAL]: | |
To provide maximum flexibility Apache now is able to load | |
modules under runtime via the DSO mechanism by using the | |
pragmatic dlopen()/dlsym() system calls. These system calls | |
are not available under all operating systems therefore you | |
cannot use the DSO mechanism on all platforms. And Apache | |
currently has only limited built-in knowledge on how to | |
compile shared objects because this is heavily | |
platform-dependent. The current state is this: | |
o Out-of-the-box supported platforms are (Not all of these | |
will work currently. DSO support is currently available on | |
most of these platforms however): | |
- Linux - SunOS - UnixWare - Darwin/Mac OS | |
- FreeBSD - Solaris - AIX - OpenStep/Mach | |
- OpenBSD - IRIX - SCO - DYNIX/ptx | |
- NetBSD - HPUX - ReliantUNIX | |
- BSDI - Digital Unix - DGUX | |
o Entirely unsupported platforms are: | |
- Ultrix | |
If your system is not on these lists but has the dlopen-style | |
interface, you either have to provide the appropriate compiler | |
and linker flags (see CFLAGS_SHLIB, LDFLAGS_SHLIB and | |
LDFLAGS_SHLIB_EXPORT below) manually or at least make sure a | |
Perl 5 interpreter is installed from which Apache can guess | |
the options. | |
If you are building from a copy of the CVS repository, rather | |
than a release distribution, then you will need these additional | |
tools: | |
o Libtool 1.3.3: | |
Make sure that you have libtool 1.3.3 or later installed | |
before trying to configure and build Apache 2.0. Libtool can | |
be downloaded from the Free Software Foundation (FSF), at | |
http://www.gnu.org/order/ftp.html. | |
o Autoconf 2.13: | |
Make sure that you have autoconf 2.13 or later installed | |
before trying to configure and build Apache 2.0. Autoconf can | |
be downloaded from the Free Software Foundation (FSF), at | |
http://www.gnu.org/order/ftp.html. | |
3. Configuring the source tree | |
--------------------------- | |
Setup: | |
If you have downloading the Apache 2.0 from the CVS, rather than | |
a release distribution, then you will need to prepare the source | |
tree for configuration and compilation. This is done by running: | |
./buildconf | |
This script ensures that all required programs are installed on | |
the currently machine, and creates the ./configure script. If | |
you are using a package downloaded from apache.org then this step | |
is not necessary. | |
Introduction: | |
The next step is to configure the Apache source tree for your | |
particular platform and personal requirements. The most important | |
setup here is the location prefix where Apache is to be installed | |
later, because Apache has to be configured for this location to | |
work correctly. But there are a lot of other options available | |
for your pleasure. | |
For a short impression of what possibilities you have, here is a | |
typical example which compiles Apache for the installation tree | |
/sw/pkg/apache with a particular compiler and flags plus the two | |
additional modules mod_rewrite and mod_speling for later loading | |
through the DSO mechanism: | |
$ CC="pgcc" OPTIM="-O2" \ | |
./configure --prefix=/sw/pkg/apache \ | |
--enable-rewrite=shared \ | |
--enable-speling=shared | |
The easiest way to find all of the configuration flags for Apache | |
2.0 is to run ./configure --help. What follows is a brief | |
description of most of the arguments. | |
Reference: | |
$ [CC=...] [CFLAGS_SHLIB=...] [TARGET=...] | |
[OPTIM=...] [LD_SHLIB=...] | |
[CFLAGS=...] [LDFLAGS_SHLIB=...] | |
[INCLUDES=...] [LDFLAGS_SHLIB_EXPORT=...] | |
[LDFLAGS=...] [RANLIB=...] | |
[LIBS=...] [DEPS=...] | |
[NOTEST_CFLAGS=...] | |
[NOTEST_LDFLAGS=...] | |
./configure | |
[--quiet] [--prefix=DIR] [--enable-NAME=(shared)] | |
[--verbose] [--exec-prefix=PREFIX] [--disable-NAME] | |
[--shadow[=DIR]] [--bindir=EPREFIX] [--with-mpm=NAME] | |
[--show-layout] [--sbindir=DIR] | |
[--help] [--libexecdir=DIR] | |
[--mandir=DIR] | |
[--sysconfdir=DIR] | |
[--datadir=DIR] | |
[--includedir=DIR] | |
[--localstatedir=DIR] | |
[--runtimedir=DIR] [--enable-suexec] | |
[--logfiledir=DIR] [--suexec-caller=UID] | |
[--proxycachedir=DIR] [--suexec-docroot=DIR] | |
[--with-layout=[FILE:]ID] [--suexec-logfile=FILE] | |
[--suexec-userdir=DIR] | |
[--with-perl=FILE] [--suexec-uidmin=UID] | |
[--without-support] [--suexec-gidmin=GID] | |
[--without-confadjust] [--suexec-safepath=PATH] | |
[--without-execstrip] | |
[--server-uid=UID] [--with-maintainter-mode] | |
[--server-gid=GID] | |
Use the CC, OPTIM, CFLAGS, INCLUDES, LDFLAGS, LIBS, CFLAGS_SHLIB, | |
LD_SHLIB, LDFLAGS_SHLIB, LDFLAGS_SHLIB_EXPORT, RANLIB, DEPS and | |
TARGET environment variables to override and expand the corresponding | |
default entries as determined by configure. Use NOTEST_CFLAGS | |
and NOTEST_LDFLAGS to add entries that should be used only during | |
the actual build and compilation of Apache, such as -Werror. | |
Use the --prefix=PREFIX and --exec-prefix=EPREFIX options to | |
configure Apache to use a particular installation prefix. The | |
default is PREFIX=/usr/local/apache and EPREFIX=PREFIX. | |
Use the --bindir=DIR, --sbindir=DIR, --libexecdir=DIR, | |
--mandir=DIR, --sysconfdir=DIR, --datadir=DIR, --iconsdir=DIR, | |
--htdocsdir=DIR, --cgidir=DIR, --includedir=DIR, | |
--localstatedir=DIR, --runtimedir=DIR, --logfiledir=DIR and | |
--proxycachedir=DIR option to change the paths for particular | |
subdirectories of the installation tree. Defaults are | |
bindir=EPREFIX/bin, sbindir=EPREFIX/bin, | |
libexecdir=EPREFIX/modules, mandir=PREFIX/man, | |
sysconfdir=PREFIX/conf, datadir=PREFIX, iconsdir=PREFIX/icons, | |
htdocsdir=PREFIX/htdocs, cgidir=PREFIX/cgi-bin, | |
includedir=PREFIX/include, localstatedir=PREFIX, | |
runtimedir=PREFIX/logs, logfiledir=PREFIX/logs and | |
proxycachedir=PREFIX/proxy. | |
Note: To reduce the pollution of shared installation | |
locations (like /usr/local/ or /etc) with Apache files | |
to a minimum the string ``/apache'' is automatically | |
appended to 'libexecdir', 'sysconfdir', 'datadir', | |
'localstatedir' and 'includedir' if (and only if) the | |
following points apply for each path individually: | |
1. the path doesn't already contain the word ``apache'' | |
2. the path was not directly customized by the user | |
Keep in mind that per default these paths are derived | |
from 'prefix' and 'exec-prefix', so usually its only a | |
matter whether these paths contain ``apache'' or | |
not. Although the defaults were defined with experience | |
in mind you always should make sure the paths fit your | |
situation by checking the finally chosen paths via the | |
--layout option. | |
Use the --with-layout=[F:]ID option to select a particular | |
installation path base-layout. You always _HAVE_ to select a | |
base-layout. There are currently two layouts pre-defined in the | |
file config.layout: `Apache' for the classical Apache path layout | |
and `GNU' for a path layout conforming to the GNU `standards' | |
document. When you want to use your own custom layout FOO, either | |
add a corresponding "<Layout FOO>...</Layout>" section to | |
config.layout and use --with-layout=FOO or place it into your own | |
file, say config.mypaths, and use | |
--with-layout=config.mypaths:FOO. | |
Use the --show-layout option to check the final installation path | |
layout while fiddling with the options above. | |
Use the --enable-NAME=(shared) and --disable-NAME options to | |
enable or disable a particular already distributed module from | |
the Apache package. | |
Use the --with-mpm=NAME option to determine which MPM should be | |
built for your server. | |
_________________________________________________________________________ | |
LIST OF AVAILABLE MODULES | |
Environment creation | |
(+) mod_env .......... Set environment variables for CGI/SSI scripts | |
(+) mod_setenvif ..... Set environment variables based on HTTP headers | |
(-) mod_unique_id .... Generate unique identifiers for request | |
Content type decisions | |
(+) mod_mime ......... Content type/encoding determination (configured) | |
(-) mod_mime_magic ... Content type/encoding determination (automatic) | |
(+) mod_negotiation .. Content selection based on the HTTP Accept* headers | |
URL mapping | |
(+) mod_alias ........ Simple URL translation and redirection | |
(-) mod_rewrite ...... Advanced URL translation and redirection | |
(+) mod_userdir ...... Selection of resource directories by username | |
(-) mod_speling ...... Correction of misspelled URLs | |
Directory Handling | |
(+) mod_dir .......... Directory and directory default file handling | |
(+) mod_autoindex .... Automated directory index file generation | |
Access Control and Authentication | |
(+) mod_access ....... Access Control (user, host, network) | |
(+) mod_auth ......... HTTP Basic Authentication (user, passwd) | |
(-) mod_auth_dbm ..... HTTP Basic Authentication via Unix NDBM files | |
(-) mod_auth_db ...... HTTP Basic Authentication via Berkeley-DB files | |
(-) mod_auth_anon .... HTTP Basic Authentication for Anonymous-style users | |
(-) mod_digest ....... HTTP Digest Authentication | |
HTTP response | |
(-) mod_headers ...... Arbitrary HTTP response headers (configured) | |
(-) mod_cern_meta .... Arbitrary HTTP response headers (CERN-style files) | |
(-) mod_expires ...... Expires HTTP responses | |
(+) mod_asis ......... Raw HTTP responses | |
Scripting | |
(+) mod_include ...... Server Side Includes (SSI) support | |
(+) mod_cgi .......... Common Gateway Interface (CGI) support | |
(+) mod_cgid ......... Common Gateway Interface (CGI) support for | |
multi-threaded MPMs | |
(+) mod_actions ...... Map CGI scripts to act as internal `handlers' | |
Internal Content Handlers | |
(+) mod_status ....... Content handler for server run-time status | |
(-) mod_info ......... Content handler for server configuration summary | |
Request Logging | |
(+) mod_log_config ... Customizable logging of requests | |
(-) mod_usertrack .... Logging of user click-trails via HTTP Cookies | |
Content Management | |
(-) mod_dav .......... WebDAV (RFC 2518) support for Apache | |
(-) mod_dav_fs ....... mod_dav backend to managing filesystem content | |
Miscellaneous | |
(+) mod_imap ......... Server-side Image Map support | |
(-) mod_proxy ........ Caching Proxy Module (HTTP, HTTPS, FTP) | |
(-) mod_so ........... Dynamic Shared Object (DSO) bootstrapping | |
Experimental | |
(-) mod_mmap_static .. Caching of frequently served pages via mmap() | |
Development | |
(-) mod_example ...... Apache API demonstration (developers only) | |
MPMs | |
mpmt_pthread ..... Mutli-process(dynamic) Multi-threaded(static) | |
Unix MPM | |
prefork .......... Preforking Unix MPM | |
dexter ........... Multi-process(static) Multi-threaded(dynamic) | |
Unix MPM | |
perchild ......... Multi-process(static) Multi-threaded(dynamic) | |
Unix MPM, that allows a User per child process | |
winnt ............ Multi-process(1) Multi-threaded Windows MPM | |
mpmt_beos ........ Multi-process Multi-threaded Beos MPM | |
beos ............. Multi-process Multi-threaded Beos MPM | |
spmt_os2 ......... Single-process Multi-threaded OS/2 MPM | |
_________________________________________________________________________ | |
(+) = enabled per default [disable with --disable-module] | |
(-) = disabled per default [enable with --enable-module ] | |
Use the --enable-suexec option to enable the suEXEC feature by | |
building and installing the "suexec" support program. | |
CAUTION: FOR DETAILS ABOUT THE SUEXEC FEATURE WE HIGHLY RECOMMEND | |
YOU TO FIRST READ THE DOCUMENT htdocs/manual/suexec.html | |
BEFORE USING THE ABOVE OPTIONS. | |
USING THE SUEXEC FEATURE PROPERLY CAN REDUCE | |
CONSIDERABLY THE SECURITY RISKS INVOLVED WITH ALLOWING | |
USERS TO DEVELOP AND RUN PRIVATE CGI OR SSI | |
PROGRAMS. HOWEVER, IF SUEXEC IS IMPROPERLY CONFIGURED, | |
IT CAN CAUSE ANY NUMBER OF PROBLEMS AND POSSIBLY CREATE | |
NEW HOLES IN YOUR COMPUTER'S SECURITY. IF YOU AREN'T | |
FAMILIAR WITH MANAGING SETUID ROOT PROGRAMS AND THE | |
SECURITY ISSUES THEY PRESENT, WE HIGHLY RECOMMEND THAT | |
YOU NOT CONSIDER USING SUEXEC AND KEEP AWAY FROM THESE | |
OPTIONS! | |
Use the --quiet option to disable all configuration verbose | |
messages. | |
4. Building the package | |
-------------------- | |
Now you can build the various parts which form the Apache package | |
by simply running the command: | |
$ make | |
Please be patient here, this takes approximately 2 minutes to | |
complete under a Pentium-166/FreeBSD-2.2 system, dependend on the | |
amount of modules you have enabled. | |
5. Installing the package | |
---------------------- | |
Now its time to install the package under the configured | |
installation PREFIX (see --prefix option above) by running: | |
$ make install | |
For the paranoid hackers under us: The above command really | |
installs under prefix _only_, i.e. no other stuff from your | |
system is touched. Even if you upgrade an existing installation | |
your configuration files in PREFIX/conf/ are preserved. | |
6. Testing the package | |
------------------- | |
Now you can fire up your Apache HTTP server by immediately | |
running: | |
$ PREFIX/bin/apachectl start | |
and then you should be able to request your first document via | |
URL http://localhost/ (when you built and installed Apache as | |
root or at least used the --without-confadjust option) or | |
http://localhost:8080/ (when you built and installed Apache as a | |
regular user). Then stop the server again by running: | |
$ PREFIX/bin/apachectl stop | |
7. Customizing the package | |
----------------------- | |
Finally you can customize your Apache HTTP server by editing the | |
configuration files under PREFIX/conf/. | |
$ vi PREFIX/conf/httpd.conf | |
Have a look at the Apache manual under docs/manual/ or | |
http://httpd.apache.org/docs/ for a complete reference of | |
available configuration directives. | |
8. Preparing the system | |
-------------------- | |
Proper operation of a public HTTP server requires at least the | |
following: | |
1. A correctly working TCP/IP layer, since HTTP is implemented on | |
top of TCP/IP. Although modern Unix platforms have good | |
networking layers, always make sure you have all official | |
vendor patches referring to the network layer applied. | |
2. Accurate time keeping, since elements of the HTTP protocol are | |
expressed as the time of day. So, it's time to investigate | |
setting some time synchronization facility on your | |
system. Usually the ntpdate or xntpd programs are used for | |
this purpose which are based on the Network Time Protocol | |
(NTP). See the Usenet newsgroup comp.protocols.time.ntp and | |
the NTP homepage at http://www.eecis.udel.edu/~ntp/ for more | |
details about NTP software and public time servers. | |
9. Contacts | |
-------- | |
o If you want to be informed about new code releases, bug fixes, | |
security fixes, general news and information about the Apache | |
server subscribe to the apache-announce mailing list as | |
described under http://httpd.apache.org/announcelist.html | |
o If you want freely available support for running Apache please | |
join the Apache user community by subscribing at least to the | |
following USENET newsgroup: comp.infosystems.www.servers.unix | |
o If you want commercial support for running Apache please | |
contact one of the companies and contractors which are listed | |
at http://httpd.apache.org/info/support.cgi | |
o If you have a concrete bug report for Apache please go to the | |
Apache Group Bug Database and submit your report: | |
http://httpd.apache.org/bug_report.html | |
o If you want to participate in actively developing Apache please | |
subscribe to the `new-httpd' mailing list as described at | |
http://www.apache.org/foundation/mailinglists.html | |
Thanks for running Apache. | |
The Apache Group | |
http://www.apache.org/ |