New features with this release, as extensions of the Apache functionality. Because the core code has changed so significantly, there are certain liberties that earlier versions of Apache (and the NCSA daemon) took that recent Apache versions are pickier about - please check the compatibility notes if you have any problems.
If you're upgrading from Apache 1.2, you may wish to read the upgrade notes.
Enhancements: Core | Performance | Configuration | Modules | API | Misc
Configuration have been replaced with
"AddModule" with a slightly different syntax. For module
authors there are some changes designed to make it easier for
users to add their module.ProxyReceiveBufferSize
directive gives mod_proxy's outgoing connections
larger network buffers, for increased throughput.writev (where
available) to issue multiple writes with a single system
call. They also avoid copying memory into buffers as much as
possible. The result is less CPU time spent on transferring
large files.mmap, which
means bytes are only copied from the disk buffer to the
network buffer directly by the kernel. The program never
copies bytes around, which reduces CPU time. (Only where
available/tested.)mod_log_config can
be compile-time configured to buffer writes.strncpy() with
ap_cpystrn(), a routine which doesn't have to
zero-fill the entire result. This has dramatic effects on
mod_include speed.See the new performance documentation for more information.
configure script and a corresponding top-level
Makefile.tmpl file. The goal is to provide a GNU
Autoconf-style frontend which is capable to both drive the
old src/Configure stuff in batch and
additionally installs the package with a GNU-conforming
directory layout. Any options from the old configuration
scheme are available plus a lot of new options for flexibly
customizing Apache.README.configure and INSTALL for
more information.apxs was created which provides
off-source building, installing and activating of those
DSO-based modules. It completely hides the platform-dependent
DSO-build commands from the user and provides an easy way to
build modules outside the Apache source tree. To achieve this
APACI installs the Apache C header files together with the
apxs tool./usr/local/apache//usr/local/etc/httpd/
to /usr/local/apache/. This change covers only
the default setting (and the documentation); it is of course
possible to override it using the -d
ServerRoot and -f httpd.conf switches
when starting apache.NameVirtualHost
directive is used to list IP address:port pairs on which
HTTP/1.1-style virtual hosting occurs. This is vhosting based
on the Host: header from the client. Previously
this address was implicitly the same as the "main address" of
the machine, and this caused no end of problems for users,
and was not powerful enough. Please see the Apache Virtual Host documentation for
further details on configuration.Include directiveInclude
directive includes other config files immediately at that
point in parsing.-S command
line option it will dump out information regarding how it
parsed the VirtualHost sections. This is useful
for folks trying to debug their virtual host
configuration.SetEnvIf
and SetEnvIfNoCase.
These allow you to set environment variables for server and
CGI use based upon attributes of the request.mod_mime_magic has been added.
It uses "magic numbers" and other hints from a file's
contents to figure out what the contents are. It then uses
this information to set the file's media type, if it cannot
be determined by the file's extension.UNIQUE_ID.ProxyVia
directive allows switching "Via:" support off or on, or
suppressing outgoing "Via:" header lines altogether for
privacy reasons.NoProxy
and ProxyDomain
directives added to proxy, useful for intranets.ProxyPassReverse
directive. It lets Apache adjust the URL in the
Location header on HTTP redirect responses.mod_include string
comparisonsmod_dir
module has been split in two, with mod_dir handling directory
index files, and mod_autoindex creating
directory listings. Thus allowing folks to remove the
indexing function from critical servers.SuppressColumnSorting IndexOptions
keyword.SuppressHTMLPreamble
can be used if your README.html file includes its own
HTML header.IndexOptions
directive now allows the use of incremental prefixes (+/-
to add/remove the respective keyword feature, as was
already possible for the Options directive) to
its keyword arguments. Multiple IndexOptions directives
applying to the same directory will now be merged.IconHeight and
IconWidth let you set height
and width attributes to the <IMG> tag
in directory listings.NameWidth keyword to the IndexOptions
directive lets you set the number of columns for "fancy"
directory listings. If set to an '*' asterisk, the
name width will be adjusted automatically.Alias and
RedirectAliasMatch,
ScriptAliasMatch,
and RedirectMatch
directives allow for the use of regular expression matching.
Additionally, new <DirectoryMatch>,
<LocationMatch>,
and <FilesMatch>
sections provide a new syntax for regular expression
sectioning.AddModuleInfo
directive added to mod_infoTransferLog disables
loggingTransferLog
directive is given then no log is written. This supports
co-existence with other logging modules.LogFormat
directive has been enhanced to allow you to give nicknames to
specific logging formats. You can then use these nicknames in
other LogFormat and CustomLog
directives, rather than having to spell out the complete log
format string each time.RewriteMap
directiveRewriteMap directive
of mod_rewrite. They provide two new features: First, you now
can randomly choose a sub-value from a value which was
looked-up in a rewriting map (which is useful when choosing
between backend servers in a Reverse Proxy situation).
Second, you now can translate URL parts to fixed (upper or
lower) case (which is useful when doing mass virtual hosting
by the help of mod_rewrite).For all those module writers and code hackers:
child_initchild_exitchild_init and child_exit functions
are passed a pool whose lifetime is the same as the lifetime
of the child (modulo completely fatal events in which Apache
has no hope of recovering). In contrast, the module
init function is passed a pool whose lifetime
ends when the parent exits or restarts.child_terminateregister_other_childhttp_main.h. This is used in the parent
to register a child for monitoring. The parent will report
status to a supplied callback function. This allows modules
to create their own children which are monitored along with
the httpd children.piped_loghttp_log.h. This API provides the common
code for implementing piped logs. In particular it implements
a reliable piped log on architectures supporting it
(i.e., Unix at the moment).set_last_modified split into
threeset_last_modified performed
multiple jobs including the setting of the
Last-Modified header, the ETag
header, and processing conditional requests (such as IMS).
These functions have been split into three functions:
set_last_modified, set_etag, and
meets_conditions. The field mtime
has been added to request_rec to facilitate
meets_conditions.ap_log_errorap_log_error. This is still a work in
progress.set_file_slot for config
parsingset_file_slot routine provides a
standard routine that prepends ServerRoot to non-absolute
paths.post_read_request module
APIpsocket, and
popendirpsocket and pclosesocket
functions allow for race-condition free socket creation with
resource tracking. Similarly popendir and
pclosedir protect directory reading.is_initial_reqkill_only_onceap_spawn_child functions which
prevents Apache from aggressively trying to kill off the
child.alloc debugging codeALLOC_DEBUG provides a rudimentary
memory debugger which can be used on live servers with low
impact -- it sets all allocated and freed memory bytes to
0xa5. Defining ALLOC_USE_MALLOC will cause the
alloc code to use malloc() and
free() for each object. This is far more
expensive and should only be used for testing with tools such
as Electric Fence and Purify. See main/alloc.c
for more details.ap_cpystrnstrncpy "lookalike", with slightly
different semantics is much faster than strncpy
because it doesn't have to zero-fill the entire buffer.table_addn, table_setn,
table_mergenpstrdup on their arguments. This provides for
big speedups. There is also some debugging support to ensure
code uses them properly. See src/CHANGES for
more information.construct_urlserver_rec * to taking a request_rec
*.get_server_name,
get_server_portap_bspawn_child and
ap_call_execchild_info * to spawn
function (as passed to ap_bspawn_child) and to
ap_call_exec to allow children to work correctly
on Win32. We also cleaned up the nomenclature a bit,
replacing spawn_child_err with simply
ap_spawn_child and
spawn_child_err_buff with simply
ap_bspawn_child.ap_add_version_component()Server: header line. Previous 1.3beta versions
had used a SERVER_SUBVERSION compile-time
#define to perform this function. Whether the
tokens are actually displayed is controlled by the new
ServerTokens directive.AccessFileName
EnhancementAccessFileName directive can now take
more than one filename. This lets sites serving pages from
network file systems and more than one Apache web server,
configure access based on the server through which shared
pages are being served.HostnameLookups now defaults to
"Off"HostnameLookups
directive now defaults to "Off". This means that, unless
explicitly turned on, the server will not resolve IP
addresses into names. This was done to spare the Internet
from unnecessary DNS traffic.HostnameLookups
directive now supports double-reverse DNS. (Known as
PARANOID in the terminology of tcp_wrappers.) An IP
address passes a double-reverse DNS test if the forward map
of the reverse map includes the original IP. Regardless of
the HostnameLookups setting, mod_access access lists using
DNS names require all names to pass a
double-reverse DNS test. (Prior versions of Apache required a
compile-time switch to enable double-reverse DNS.)timefmt string used by mod_include has
been modified to display the year using four digits rather
than the two-digit format used previously. The mod_autoindex
module has also been modified to display years using four
digits in FancyIndexed directory listings.htdigest), and these other
applications would fail to build because the routines were
built only into the server. These routines are now being
migrated to a separate subdirectory and library so they can
be used by other applications than just the server. See the
src/ap/ subdirectory.ServerSignature
directiveUseCanonicalName
directiveUseCanonicalName
off Apache will use the hostname and port supplied by
the client, if available.SERVER_VERSION definition
abstracted, and server build date added#defined value
for SERVER_VERSION. In order to keep this value
consistent when modules and the core server are compiled at
different times, this information is now available through
the core API routine ap_get_server_version().
The use of the SERVER_VERSION symbol is
deprecated. Also, ap_get_server_built() returns
a string representing the time the core server was
linked.ServerTokens, allows the
Webmaster to change the value of the Server
response header field which is sent back to clients. The
ServerTokens directive controls whether the
server will include a non-specific note in the server
identity about the type of operating system on which the
server is running as well as included module information. As
of Apache 1.3, this additional information is included by
default.{SHA1} are taken as Base64 encoded SHA1
passwords. More information and some utilities to convert
Netscape ldap/ldif entries can be found in support/SHA1.