Apache Week
   

Copyright 1996-2005
Red Hat, Inc.

Apache 1.3.6 Guide :

A guide to everything new and changed in Apache 1.3.4

First published: 26th March 1999

New in 1.3.6

This is a guide to all the changes between Apache 1.2 and Apache 1.3.6. For each change, we say which version it was introduced in, so you can also use this feature to upgrade between 1.3.* versions.

First published 25th September 1998. Last updated 26th March 1999.

Apache 1.3.6 was released on 25th March 1999 and is now the latest version of the Apache server. The previous release was 1.3.4 (version 1.3.5 was never made publically available). Apache 1.3.6 is available in source form for compiling on Unix or Windows, in pre-compiled form for many common versions of Unix, and in pre-compiled for as an single-file installer on Windows. All the pre-compiled forms also include full source code. All all available for download from any Apache local download site.

This is a bug fix and minor upgrade release, with a few new features. Users on Unix systems should upgrade to fix various bugs. Users on Windows systems should consider whether to upgrade, becausee htpasswd files that worked with 1.3.4 and earlier will not work with 1.3.6 unless updated.

New features

The main new features in 1.3.6 (compared to 1.3.4) are:

  • Logging can be conditional based on whether an environment variable is set or not (see the CustomLog directive).
  • mod_rewrite has much faster DBM and TXT maps through the use of an internal cache.
  • Passwords in htpasswd files can be encrypted with MD5 instead of DES. On windows this allows encrypted passwords for the first time, using the new bin/htpasswd.exe program.
  • Access restrictions can be applied to all methods (known and unknown) apart from specific named ones, with the new <LimitExcept...> section.
  • On Windows, additional Start menu items have been added and the bug where the conf files where not being created has been fixed.
  • On Windows, it is now possible to tell Apache to use the registry to find how to execute CGI scripts based on the file extension, with the new ScriptInterpreterSource directive.

New in 1.3.4

New features

There are several new features in 1.3.4 compared to 1.3.3:

  • A default language for documents can be set with the DefaultLanguage directive.
  • Mappings from file extension to handler can be removed with RemoveHandler
  • The negotiation module has been extensively updated to support the latest version of the HTTP/1.1 specification, to fix various bugs and inefficiencies, and to add some support for the transparent content negotiation RFCs.
  • All the new HTTP/1.1 methods required for WEBDAV (distributed authoring) have been added, so that they can be used by third-party modules to implement the DAV specifications.
  • A default order for fancy directory indexes can be set with IndexDefaultOrder.
  • New options have been added to ./configure: --target sets the executable name, --permute-module sets relative module order, --with-layout sets the directory layout and --shadow has been extended to specify the shadow directory name.

Changes for Windows

There have been a number of important security fixes to Apache on Windows. The most important is that there is much better protection against people trying to access special DOS device names (such as "nul"). In addition, there is better processing of UNC paths, and Makefiles are now provided to allow Apache to be compiled on Windows 95.

Default configuration files

Apache 1.3.3 and earlier came with three configuration files in the conf directory: httpd.conf, access.conf and srm.conf. This was for purely historic reasons: any directive can appear in any file, and the configuration files can have any filename (although the configuration file defaults to conf/httpd.conf unless overridden with the -f command line option).

Many people configure Apache using a single file, normally httpd.conf. This can be created by appending the contents of access.conf and srm.conf to httpd.conf, then removing access.conf and srm.conf. Apache 1.3.4 comes with this already done (although the access.conf and srm.conf files will exist containing a comment about why they are now empty).


New in 1.3.4 compared to 1.2

There are many new features in Apache 1.3.4 when compared to Apache 1.2. The major features are:

  • Support for Windows NT systems

    Apache now compiles and runs on Windows NT. It will also work, with slightly less functionality, on Windows 95. The current 1.3.4 release is not as well developed as the Unix version, and will be slower and may include some security problems (although it is much better than earlier 1.3 releases). For now it should be regarded as a "beta" quality release on Windows. See the separate section below on Apache for Windows.

  • Better configuration and building process

    The Apache source files have been re-organised. Modules have been moved into sub-directories directories, making it easier to add additional modules. OS specific code has been moved into separate directories. A new command-line way of configuring and installing Apache has been added.

    The source file re-organisation has made it easier to add third-party modules. They can be dropped into a directory and, with the appropriate configuration command at build time, Apache will create the Makefile for the module and build it. Larger modules can have their own directory, and can integrate easier into the build process. If modules require additional libraries to command line arguments, they can add the required options themselves during the build process, without the user having to edit the Configuration file.

    The new way of configuring and building Apache is refered to in the source tree as "APACI". This provides a command-line method of configuring Apache rather than editing the "src/Configuration" file. This method also builds a Makefile which can be used to install Apache after it has been built. APACI consists of a new configuration program, called "configure", which should be given details of all the build options such sa destination directory, modules to be built and included, compiler to be used, and so on. This is the information previously placed into the "src/Configuration" file. "configure" will use a different directory structure during installation than the normal Apache layout, unless the --compat option if used.

  • Support for dynamic modules

    Apache now supports loading of additional modules without having to recompile the source. This is refered to as "DSO" or "Dynamic Shared Objects" on Unix, and "DLL" on Windows. This means that a small Apache executable can be created, and other modules added as required. It also lets module developers release or sell modules in binary only form, ready to be loaded into a running Apache. With graceful restarts it is even possible to add or remove modules while Apache is running without any downtime. DSO and DLL functionality is provided by the new module mod_so. Modules can be built ready for dynamic loading with new directives in the src/Configuration file, or using APACI's "configure" script. Using the latter can also automatically build a correct configuration file for loading the dynamic modules. A program is also provided to build modules for dynamic loading without using the Apache source tree.

    Dynamic modules are supported on these operating systems: Windows, FreeBSD, OpenBSD, NetBSD, Linux, Solaris, SunOS, Digital UNIX, IRIX, HP/UX, UnixWare, AIX, ReliantUnix and generic SVR4 platforms

  • Better performance

    There have been considerable internal changes to make Apache perform better than 1.2. Some of the more important changes are: the code which merges per-directory configurations (<Directory> sections) is more efficient, IP virtual hosts are looked-up in a hash table, less system calls are used when serving static pages, faster adaption to load spikes, less copying of data when assembling responses for sending to the client, and so on.

  • Better security

    Public web servers are always open to the risk that someone will try to attack the server. Apache is carefully written to try to eliminate as far as possible the damage that this can cause. The most serious type of attack is where the attacker can gain some kind of unauthorised access to the server system. There are no known ways of doing this with recent versions of Apache. So attackers may decide to use a "denial of service" attack. This is where they know that they cannot get into the system, so instead they try to overload the server to prevent it being used by anyone else. Obviously there is little that can be done when someone decides to attempt to overload the server by sending more and more requests, because those requests are usually indistinguishable from real requests. The load on the server in this case will increase in direct relationship with the speed of the attack. However in Apache 1.2 there were some ways in which the attacker could make the load on the server increase much more rapidly than the speed of the attack. These have been eliminated in 1.3.

    To help server administrator limit the amount of resources used by attackers, there are now also a series of new directives which can be used to specify limits on the size of each request. The size of the request line, the number of request headers, the size of the request header lines, and the size of any request body can now all be limited.

    If the server administrator does not trust users on the server system (for example, if the server is a multi-user system for customers to provide web documents), there were additional potential denial of service attacks available in 1.2. These included putting extra long lines in .htaccess files or creating .htaccess files that were actually special devices. These have been eliminated in 1.3.2.

  • Enhanced virtual host configurations

    Virtual host handling has been updated. For IP based virtual hosts, finding the virtual host for a given request is faster because the configurations are stored in a hash table. For name-based virtual hosts, the configuration has been made less ambiguous. It is now necessary to explicitly state which IP:port combination will be used for name-based requests, and requests coming in on this IP:port will only get served by virtual hosts defined for that IP:port. See Apache name-based virtual hosts.

    The order that virtual hosts are used in the configuration file has been reversed from Apache 1.2. Now the virtual hosts listed first in the configuration file have priority over those listed later.

    To help debug virtual host configurations, the new command line option -S displays how Apache has parsed the virtual host information in the configuration files.

All new features

The features above are the major changes between 1.2 and 1.3.4. This section lists most of the remaining changes, sorted into some broad categories. As well as new features, 1.3.4 has a lot of bug fixes compared with 1.2.X.

  • Configuration parsing:
    • Multiple whitespace characters within quoted strings in configuration files are no longer compressed to a single space (1.3.2)
    • Better error checking in configurations: reports missing closing section directives, reports if directive which are not valid within <VirtualHost> sections are used in a <VirtualHost> section, reports invalid multiple arguments to <Files>, <Directory>, etc (1.3.0)
    • <DirectoryMatch> sections are applied after all <Directory> sections have been applied (1.3.0)
    • Include directive added to read additional configuration files (1.3.0). Extend to allow Include directive in .htaccess and <Directory> sections (1.3.2)

  • Command line options:
    • Add a -t command line option for testing the syntax of the configuration files (does not check .htaccess files) (1.3.1)
    • Add ability to process configuration directives given on the command line. The option -c "directive" gives a directive to process before reading the configuration files, and -C "directive" gives a directive to process after reading the configuration files (1.3.0)
    • New command line option -V displays the options used when compiling Apache (1.3.0)
    • New command line option -S displays the virtual host configuration (1.3.0)
    • The -S option now does not attempt to start the server: it will exit after showing the virtual host configuration (1.3.4)
    • The -h, -l and -L options have changed meaning in 1.3.4. Previous -? gave a list of options, -l gave a list of directives and -h gave a list of modules compiled into the server. In 1.3.4, -h gives a list of options, -l gives a list of modules and -L gives a list of directives (1.3.4)

  • Child processes, CGI and SSI:
    • Does not pass invalid environment variable names to child (CGI) processes. Any invalid character in a variable name is replaced with an underscore (1.3.0)
    • REMOTE_HOST environment variables is not set if IP cannot be resolved to a hostname (1.3.0)
    • Add SERVER_SIGNATURE environment variable containing the sigature as controlled by ServerSignature directive (1.3.3)
    • Add VARIANTS environment variable from the spelling module containing list of possible matching URLs (1.3.3)

  • Logging and error messages:
    • The default text of a 404 error message changed from "File Not Found" to "Not Found" (1.3.0)
    • In log formats, %a logs the client IP address and %h now logs only the hostname (never an IP address). If no hostname is available for a given IP address, %h logs "-" (1.3.0)
    • In log formats, %v and %p log the server name and port from the configuration files, not the request (1.3.4)
    • In log formats, %V logs the hostname of the request, subject to the setting of UseCanonicalName. This is the same behaviour as %v in 1.3.3 and earlier (1.3.6)
    • Does not log an error about "handler not found" if a handler was found, but declined to serve the request (1.3.1)
    • The Apache parent process will log the reason why a child process dies, if it dies from an unexpected signal (1.3.0)
    • Logs client IP addresses in error_log messages (this was in 1.2, but not in 1.3.0 or 1.3.1. It is restored in 1.3.2)
    • Fix problem where mod_usertrack could corrupt the client hostname in the log files (1.3.1)
    • The reason for "500 Server Error" responses is passed to error documents in the ERROR_NOTES environment variable (1.3.2)
    • Logging can be conditional depending on whethe an environment variable is set or not (1.3.6).

  • Proxy:
    • More accurate error responses can be returned from the proxy (1.3.6)
    • The proxy module now handles invalid responses from IIS (1.3.2)
    • Proxy module now prompts for FTP username and password, if required, to avoid storing that information in URLs and the access_log (1.3.2)
    • The proxy module now accepted reject requests with URL syntax http://host:/path (1.3.4)

  • Performance:
    • More efficient <Directory> and <DirectoryMatch> section matching (1.3.0)
    • More efficient virtual host matching. Address * behaves like _default_ (1.3.0)
    • More efficient use of network: combines smaller network writes (1.3.0)
    • Faster response to load spikes, by first spawning one new child, then the next second two, then four and so on up to 32 children per second, until there are enough idle servers (1.3.0)
    • Efficient unbuffered CGI. As soon as the CGI stops sending output, it will be sent to the client. This replaces the old scheme where output was buffered up to a fixed size, or until the CGI process exited. This also replaces the old "nph-" prefix for getting unbuffered CGI output (which was not compatible with HTTP/1.1 or SSL layers anyway) (1.3.0)

  • Security fixes:
    • Directives to limit size of requests, to avoid denial of service attacks based on sending extra big requests. Eliminate unnecessary processing when handing requests (1.3.2)
    • Avoid denial of service attacks if a configuration file (such as a .htaccess file) is a device file, by refusing to open device files apart from /dev/null which is still valid (1.3.0)
    • Correctly handle over-long lines in configuration files (1.3.0)
    • Fix denial of service attack by sending requests with lots of slashes in them (1.3.0)
    • Deny access to directories if a .htaccess file in that directory cannot be read (1.3.0)

  • Better name-based virtual host support, using new directive NameVirtualHost. This gives the port:IP of interfaces which are used for name-based virtual hosts. Requests on this port can only match <VirtualHost> sections defined on that port:IP combination. Also reverse order of matching of <VirtualHost> sections so earlier sections override later ones(1.3.0)
  • Detach from stdin, stdout and stderr after reading configuration files, so Apache can be started via rsh, etc (1.3.0)
  • Directory indexes now dynamically size the width of the filename column (1.3.2). Columns can be sorted (1.3.0)
  • Do not kill connections in progress when a TERM (shutdown) signal is received (1.3.0)
  • Experimental support for passing symbols required by the Apache core through dynamic modules onto libraries loaded by those modules (Rule SHARED_CHAIN). (1.3.2)
  • Expires headers will now be returned for content which is served from sources other than files, if configured with mod_expires (1.3.2)
  • Header files can be included into C++ code (1.3.0)
  • mod_negotiation has been overhauled to bring it up to the latest HTTP/1.1 revision 6 specification and to support some of the transparent content negotiation drafts (1.3.4)
  • mod_negotiation also works around a bug in Lynx where it sends a header saying it understands transparent content negotiation, but it does not (1.3.6)
  • mod_rewrite now correctly sets the HTTP/1.1 Vary: response header if decisions are made based on request headers (1.3.2)
  • mod_rewrite has much faster DBM and TXT maps through the use of cacheing. (1.3.6)
  • mod_status is now included by default. The new directive ExtendedStatus can be used to turn this module on (1.3.2)
  • New script apachectl to start, stop, restart and check the status of Apache (1.3.0)
  • SIGPIPE is no longer reserved for use by the Apache core while sending a response (1.3.6)
  • Support for DES and MD5 encrypted passwords (1.3.6)
  • Support has been added for the HTTP methods defined in the distributed authoring drafts (WEBDAV) (1.3.4)
  • Support has been added for the new Expect: response header, as introduced in HTTP/1.1 revision 5 (1.3.4)
  • The configuration directives are now all given in httpd.conf, and the default access.conf and srm.conf are empty (1.3.4)
  • The PID file is removed when Apache exits (1.3.2)
  • The meta information module (mod_cern_meta) can be configured on a per-directory basis (1.3.0)
  • The status page now shows the "generation" of each child process (1.3.6)
  • Try to avoid problems with eight-bit characters in URLs and configuration files (1.3.1)
  • Use the supplied regex library on all systems, unless explicitly told otherwise (1.3.0)
  • Various year 2000 compliance changes (these are minor changes, in things like log messages) (1.3.0)

Major Modules Changes

New Modules

The following modules have been added to this version of Apache. Of these, only mod_setenvif is compiled in by default. The other modules here are optional, and to use them you need to uncomment the appropriate line in Configuration and re-compile Apache.

  • Dynamic loading of modules (mod_so)
    The mod_dld module from previous releases has been removed and replace with a much improved replacement, mod_so. This module supports dynamic loading of modules on most Unix systems and on Windows. This module was added in 1.3.0.
  • Conditionally set environment variables ( mod_setenvif)
    The mod_setenvif module can be used to set environment variables based on headers on the incoming request or other aspects of the request (for example, the client hostname). The replaces the mod_browser module which set environment variables based on the User-Agent request header. This module was added in 1.3.0.
  • Fix typos in URLs (mod_speling)
    This module can be used to correct simple typing errors is requested URLs, based on looking at real directory and file names. This modules was added in 1.3.0.
  • Generic unique ID for every request ( mod_unique_id)
    This module generates a unique identifier for every hit. It was added in 1.3.0.
  • Automatically work out MIME type ( mod_mime_magic)
    This module can be used to return a MIME type based on the contents of the file being served. This is similar to the Unix "file" command. Added to 1.3.0.
  • Directory indexing module ( mod_autoindex)
    This new module contains the directory indexing functionality previously provided by mod_dir. See the section on mod_dir below.
  • API Example (mod_example)
    This module provides example code for module developers.

Modules Changed

  • mod_dld replaced by mod_so
    See section above about mod_so.
  • mod_browser replaced by mod_setenvif See section above about mod_setenvif.
  • mod_dir split into two modules (mod_dir and mod_autoindex)
    The mod_dir module has been split into two modules. Both are included by default in an Apache build. The new mod_autoindex module supports creating directory indexes. The updated mod_dir now just supports the basic functionality of trailing-slash redirects and DirectoryIndex files. This means that if directory indexes are not required, the large mod_autoindex module does not need to be compiled into Apache. (Updated in 1.3.0)
  • mod_auth_msql removed
    This module is no longer supplied with Apache, because there are a lot of possible databases and it is not possible to include all database modules into the Apache distribution. (Removed in 1.3.0).

New and Updated Ports

This section contains summaries of changes for more unusual systems or systems not widely used by the main Apache developers. Sometimes these ports are not maintained after their initial inclusion in the Apache source tree. Changes to support the major platforms used by Apache developers (such as FreeBSD, Linux, IRIX and Solaris) are not listed here.

  • Changed the name of the "OS/2" port from "__EMX__" to "OS2" (1.3.2)
  • New port and binaries available for Windows NT (1.3.0)
  • New port to Acorn RISCiX (1.3.0)
  • New port to BeOS (1.3.0)
  • New port to Cyberguard V2 port (1.3.4)
  • New port to DRS 6000 (1.3.3)
  • New port to Encore UMAX V (1.3.0)
  • New port to HP UX 11 (1.3.0)
  • New port to Linux with glibc (e.g. RedHat 5) (1.3.0)
  • New port to NCR MP/RSA 3.0 (1.3.0)
  • New port to PowerMAX OS (1.3.4)
  • New port to Rhapsody (Mac OS X) (1.3.2)
  • New port to SCO SV (1.3.0)
  • New port to SONY NEWS-OS (1.3.0)
  • New port to Sequent (1.3.0)
  • New port to Siemens Nixdorf BS2000-OSD (1.3.0)
  • New port to UnixWare 7 (1.3.1)
  • New port toNEC EWS4800 (1.3.2)
  • Recongnise UnixWare 7.0.1 (1.3.3)
  • Updated support for ARM Linux (1.3.1)
  • Updated support for LynxOS (1.3.0)
  • Updated support for MPE (1.3.0)
  • Updated support for NCR SVR4 (1.3.1)
  • Updated support for NEXTSTEP (1.3.1)
  • Updated support for QNX 32 bit systems (1.3.1)

Changes for Apache on Windows

Apache 1.3.0 was the first full release of Apache to support Windows systems. Some of the most important changes since the last 1.3 beta release are listed here.

  • Add support for encrypted passwords (encrypted with the MD5 algorithm). Added bin/htpasswd to create and modify MD5 passwords (1.3.6)
  • Errors from running Apache with -i or -u command line arguments are now displayed on the console rather than sent to the error log (1.3.6)
  • Compile time default for the error log filename is error.log rather than error_log (1.3.6)
  • New directive ScriptInterpreterSource which configures Apache to find a CGI file interpreter via the registry rather than via the #! line in the CGI file itself (1.3.6)
  • The Apache executable now contains an icon (1.3.6)
  • The binary installer now creates additional Start menu options for shuttind down a running console application and to uninstall the NT Apache service (1.3.6)
  • Remove limit of 64 threads per process (1.3.2)
  • Remove trailing "."s in path components, which are ignored by windows when accessing files so could be used to bypass security settings (1.3.1)
  • Eliminate directory components consisting of three or more dots (e.g. "...") which can cause security problems (1.3.1)
  • Make IndexIgnore case insensitive because the Windows filesystem is (usually) case insensitive.
  • Set current working directory for CGI scripts (1.3.0)
  • Pass environment variables to CGI scripts (1.3.0)
  • Add ability to gracefully shutdown or restart Apache on Windows 95, without pressing Control-C in the Apache console window (1.3.3)
  • Allow CGI child processes to die properly if the client aborts the connection (1.3.3)
  • Handle paths like D:/ correctly (1.3.3)
  • Handle drive letters sub-requests properly (1.3.3)
  • A running console version of Apache can be restarted or shutdown with the -k command line option (1.3.3)
  • Makefiles have been added to allow Apache to be build on Windows 95 (1.3.4)
  • Various problems with UNC paths have been fixed (1.3.4)
  • Possible security and denial of service attacks by use of special DOS devices have been removed (1.3.4)

Directive Changes

This section lists the directives which are new in this release, or which have changed their behaviour or syntax. Note that directives provided by the new modules are not listed (see the documentation for the module concerned for its directives).

When upgrading from an earlier version of Apache, check this list to see if any of the directives in your configuration have changed.

New Directives

  • <DirectoryMatch>, <LocationMatch> and <FilesMatch> can be used to match sections using regular expressions. These are equivalent to the <Directory ~ ...> syntax (1.3.0)
  • <IfDefine name >...</IfDefine> sections which are only used if Apache is started with a corresponding -Dname command line options (1.3.1)
  • <LimitExcept method method ...> is the inverse of <Limit>. This contents of LimitExcept only apply if the request method is not listed as an argument. (1.3.6)
  • AddModuleInfo provides additional text in mod_info output (1.3.0)
  • AliasMatch, ScriptAliasMatch and RedirectMatch provide the ability to use regular expressions (1.3.0)
  • AllowCONNECT to allow CONNECT requests on arbitrary ports (for proxying HTTPS requests) (1.3.2)
  • CoreDumpDirectory gives the directory to use to dump core files, after receiving signals which cause core dumps (1.3.0)
  • DefaultLanguage sets a default language to files without a language specified by an extension (1.3.4)
  • ExcessRequestsPerChild Used on Windows systems only
  • ExpiresActive to turn the expires module on or off (1.3.0)
  • ExtendedStatus to turn on or off collected status information for display by mod_status. Off by default. Replaces the previous compile-time rule "Rule=STATUS" (1.3.2)
  • Include specifies arbitrary configuration files to be read when this directory is processed (1.3.0)
  • IndexDefaultOrder sets a default sorting order for fancy directory indexes (1.3.4)
  • LimitRequestBody limits the size of the request message body (1.3.2)
  • LimitRequestFields sets a maximum number of requests headers that Apache will accept (1.3.2)
  • LimitRequestFieldsize sets a maximum size of any single request header (1.3.2)
  • LimitRequestLine set a maximum request-line length that Apache will accept (1.3.2)
  • ListenBacklog can set the size of the TCP backlog (the argument to listen()) (1.3.0)
  • LogLevel sets the detail that will be logged to the error_log file. Possible values are "emerg", "alert", "crit", "error", "warn", "notice", "info" and "default". The default is error. (1.3.0)
  • NameVirtualHost added to support better configuration of name-based virtual hosts (1.3.0)
  • NoProxy in mod_proxy prevents proxying certain addresses (1.3.0)
  • ProxyDomain in mod_proxy adds a domain to unqualified requests (1.3.0)
  • ProxyPassReverse in mod_proxy lets Apache work as a "revere proxy", i.e. a front-end to multiple servers (1.3.0)
  • ReceiveBufferSize in mod_proxy to control size of the receive buffer (like SendBufferSize) (1.3.0)
  • RemoveHandler in mod_mime removes a mapping between a file extension and a handler name (1.3.4)
  • ScriptInterpreterSource (valid on Windows only) can be used to tell Apache to file CGI interpreters via the registry. If set to "script" it uses the initial #! line from the CGI file, like previous versions. If set to "registry" it uses the registry to map the file extension to the interpreter. The default is "script". (1.3.6)
  • ServerSignature can be used to turn on a "signature" in various automatically generated responses such as error messages. The possible values are "off" which is the default, "on" which uses a signature of the server version and hostname, and "email" which adds the mail address from the ServerAdmin directive (1.3.0)
  • ServerTokens allows the Server: response header to be configured. Possible values are "min" which returns just the Apache version number, "OS" which also returns the operating system type, and "full" which returns the identifiers from any modules which request to be added. The default is "full". (1.3.0)
  • ThreadsPerChild Used on Windows systems only
  • UseCanonicalName is used to determine how Apache creates URLs pointing back to itself. The default value is "on" which means that Apache will use values from the configuration (i.e. ServerName and Port settings). If set to "on", Apache will use the information supplied by the client. (1.3.0). The use of this directive is now controlled by the Options override, rather than AuthConfig (1.3.4)

Changed Directives

  • <Directory> and <Location> sections defined in a virtual host override corresponding sections defined in the main server, rather than the other way around (1.3.0)
  • <Directory> wildcards (* and ?) now do not match the forward slash character, to be compatible with shell expansions (1.3.0)
  • <Directory>, <Files> and <Location> can now use [...] style wildcards (1.3.0)
  • <Limit> now matches request methods on a case-insensitive basis, as required by the HTTP/1.1 specification (1.3.1)
  • AccessFileName can take more than one filename argument (1.3.0)
  • AuthName argument must be enclosed in double-quotes if it contains whitespace (1.3.0)
  • CheckSpelling is now valid in per-directory locations (.htaccess files and <Directory> sections) (1.3.2)
  • CustomLog can now take an additional argument env=[!]env-var which makes the logging conditional on the named environment variable being set (or, if ! is used before the env-var, unset) (1.3.6)
  • CustomLog formats can contain or to represent a tab or newline character in the log file (1.3.6)
  • FancyIndexing now no longer unsets any options already set by IndexOptions (from 1.3.2)
  • HostnameLookups defaults to off (1.3.0)
  • HostnameLookups has a new possible argument, double, which ensures that Apache only uses a remote hostname if it passes a double-reverse lookup. This replaces the MAXIMUM_DNS compile time option (1.3.0)
  • IndexOptions has new arguments: NameWidth specifies the width of the filename column in directory indexes (1.3.2). SuppressColumnSorting turns off the links for sorting the output (1.3.0). SuppressHTMLPreamble prevents Apache outputting the start of the HTML response (1.3.0). IconHeight and IconWidth set the size of the icons (1.3.0). Options can now be added or removed with leading + or - (like Options) (1.3.3)
  • LocationMatch no longer matches a single slash against multiple slashes in the request URL (1.3.0)
  • RefererIgnore is now case-insensitive (1.3.0)
  • RewriteMap now has two additional map types: "rnd" for randomreplacements, and "int" to use an internal function to make a replacement (1.3.0)
  • SetenvIf and SetenvIfNoCase can now match an empty field with ^$ (1.3.1)
  • TransferLog: if no log file is defined, Apache will not log requests. Previous versions would always log to the default filename (access_log) (1.3.0)
  • Userdir can disable specific users, or can selective enable particular users (1.3.0)
  • allow and deny can accept network/netmask and cidr formats. If hostnames are used a double-reverse lookup is always used (1.3.0)
  • allow can be used to allow access based on environment varibales, with allow from env=variable. This is useful with the new mod_setenvif directives. The old allow user-agents syntax is no longer valid. (1.3.0)
  • require can now accept TAB characters between arguments (1.3.3)

Configuration and Support Program Changes

Sample Configuration

The conf directory contains examples of the four configuration files needed: httpd.conf, srm.conf, access.conf and mime.types. Each of these files has been updated slightly. In 1.3.4 all these files have been merged into the single conf/httpd.conf file.

  • httpd.conf
    HostnameLookups is set to "off" to reflect the new default. LogLevel set to warn. LogFormatCustomLog is used instead of TransferLog. ServerSignature is set to "on".
  • srm.conf
    A <Files .htaccess> section prevents access to .htaccess files.
  • access.conf
    Apache now defaults to a much more restrictive set of permissions, by specifying AllowOverride none and Options FollowSymLinks in a <Directory /> section. This means that .htaccess files will not be processed unless turned on by another <Directory> section, and all options (except following symbolic links) are turned off. This is a much more secure initial configuration.
  • mime.types
    New types for javascript, mpeg 3, VRML, CSS and XML documents. All currently known MIME types (as registered with the IANA) have been added (1.3.4)

Support Programs

New in the support directory are a web benchmark program (ab.c), a script to control the starting and stopping of the Apache server (apachectl), a perl script to compile modules for dynamic loading without using the source tree (apxs.pl), a perl script to resolve IP addresses in log files (logresolve.pl), a script to split logfiles based on virtual hosts (split-logfile), and manual pages for all these programs (1.3.0). The benchmark program has been overhauled and can now output HTML pages (1.3.6).

apxs can now pass arbitrary arguments on to the compiler or linker, with -Wc and -Wl respectively (1.3.4).

The httpd_monitor program has been removed since status information about Apache can be obtained via mod_status's output. (1.3.0).

The manual pages for ab and apachectl have been moved to section 8. (1.3.6).

Changes to ./configure

  • The new option --permute-module allows the relative order of modules to be specified (1.3.4)
  • The default directory layout for make install is now the same as the layout that src/Configure uses. The new --with-layout option can be used to specify a different layout, for example --with-layout=GNU would use the previous default layout for ./configure (1.3.4)
  • The new option --target=name can be used to give the binary a different name than the default "httpd" (1.3.4)
  • The --shadow option has been extended to take an argument which is the name of the shadow directory to create (1.3.4)

Upgrade Notes

Incompatibilities between 1.3.3 and 1.3.4

Because of the various changes between 1.3.3 and 1.3.4, when upgrading you should beware of the following things:

  • If you use ./configure to configure and compile Apache, be careful to ensure that you get the directory layout you want. If you previously used --compat, you can omit it. If you previously did not use --compat you must give --with-layout=GNU
  • If you have can scripts which run Apache and use any of the arguments -?, -h, -l or -L, then they must be updated to use the new arguments (-h, -l, -L and -R, respectively)
  • If you use the -S command line option to show the virtual host configuration and start the server running, you will have to do this is in two steps since -S will now exit without starting the server
  • If you use UseCanonicalName inside .htaccess files, you must ensure that the Options override is in force rather than the AuthConfig override.
  • If you used multiviews for content negotiation and relied on the fact that Apache read the variants from the disk in the directory order (rather than, say, alphabetically) you should check that the negotiation still works as expected (Apache now sorts the variants into order before using them, so that negotiation is not dependent on the usually arbitrary directory order of the files). This should not normally be a problem.

The first three items are described in more detail below.

Directory layout changes in <SAMP>./configure</SAMP>

If you configure Apache with ./configure you will have to change the options you use to set the directory layout. If you do not currently use an option to set the directory layout you will have to use an option in 1.3.4 because the default layout has changed.

There are two layouts for directories: the first is the "Apache" layout. This was used in all versions of Apache before 1.3, and in Apache 1.3 it is still used if you use src/Configure to configure and build Apache. The second layout was introduced by ./configure, and is called the "GNU" layout because it is similar to the standard layout used by GNU tools. This created two layouts within Apache 1.3.*: the Apache layout if src/Configure was used, and the GNU layout if ./configure was used (although ./configure could also be told to use the Apache layout with the --compat option).

Unfortunately this created a lot of confusion, and in particular many people thought that the GNU layout was the preferred directory layout for 1.3, because it was the default in ./configure. It is not: the preferred layout is the "Apache" layout, consistent with src/Configure and Apache 1.2.

In Apache 1.3.4, the Apache layout becomes the default layout for ./configure. If you have been using the --compat option, then you do not need it anymore. However if you did not use the --compat option (that is, you used the GNU directory layout) then you must now use --with-layout=GNU.

This table summarises the meaning of the directory layout arguments in each version:

Layout option Meaning in 1.3.3 Meaning in 1.3.4
None GNU layout Apache layout
--compat Apache layout Apache layout (but not needed since this is the default)
--with-layout=GNU Not valid GNU layout
--with-layout=Apache Not valid Apache layout (but not needed since this is the default)

Command line argument changes

Various command line arguments have changed in meaning. This affects the -h, -l and -L options. This table shows the meanings of these arguments in both versions of Apache.

Option Meaning in 1.3.3 Meaning in 1.3.4
-? List command line options List command line options (but use -h instead)
-h List modules List command line options
-l List all directives List modules
-L Specify location of the core loadable module if built with SHARED_CORE List all directives
-R Not used Specify location of the core loadable module if built with SHARED_CORE

So if you were using -?, change to using -h. Similarly, change from -h to -l, from -l to -L and from -L to -R.

Also, the -S option now exits after showing the virtual host configuration, rather than continuing and starting the server.

Upgrading from 1.2

When upgrading from a 1.2 server to 1.3, the following changes will also be required:

  • Virtual hosts are matched by looking from the first one downward in the configuration file, rather than from the last one. So you should consider reversing the order of your virtual host sections. Use the new -S option to check your virtual hosts configuration.
  • If you use name-based virtual hosts read carefully the Apache documentation about them. This has changed considerably. If you server both name-based and IP-based hosts from the same IP:port combination you will need to change your configuration. In all cases you will need to add NameVirtualHost directives for each IP:port on which name-based requests can be received. Again, use the -S option to check your virtual hosts configuration.
  • Check your AuthName directives (remember to check in .htaccess files as well) for multi-word arguments. If you have any, put quotes around the argument.

Known Bugs

These bugs in 1.3.3 have been fixed in 1.3.4:

Windows-specific Bugs

  • In some circumstances the configuration files in the conf directory are not installed. This can occur if the computer needs to be rebooted because a system DLL file was updated. For now a work-around is to re-install Apache again after the reboot, since the DLL will not need to be installed again. PR#3988.
  • Requests for filenames containing non-ASCII characters such as accented characters gives a "Forbidden" error. PR#3890.
  • If the ErrorLog directive is removed from the httpd.conf file, Apache will use the built-in default filename for the error log file. This should match the name given on the ErrorLog directive in the distributed httpd.conf file, which was error.log. However it would actually revert to the "Unix" name of error_log. From the next release it will default to error.log.

Other Bugs

  • The default method of locking between processes on Linux has been changed from flock and fcntl, because of possible instability with flock in some kernel versions. PR#3531.
  • In Apache 1.3.4, lines in the error log were being preceeded by "httpd: ". This will be removed in the next version to avoid breaking any automatic error log analysis programs.
  • If a CGI returns a Set-Cookie header it was sometimes being duplicated in the response to the client. PR#3872.
  • If the mod_info module was compiled as a DSO and the relevant lines uncommented in iin the distributed httpd.conf file, Apache would not start because the mod_info directive appeared before the line which loaded mod_info into the server. PR#3936.
  • Fix potential buffer overrun problem. PR#3917.
  • Added support for the standard file layout on Mac OS X (Rhapsody).
  • apachectl gives an error if the PID file does not exist.
  • The macro escape_uri was renamed to ap_escape_uri but no backward compatibility was provided from the old name. PR#3725.
  • Using the mod_speling module where there were lots of possible matching files caused Apache to use more memory than a linear relationship to the amount of data being handled.
  • It is recommended to use a single configuration file (typically conf/httpd.conf) but mod_info will log a warning message if it cannot read conf/access.conf or conf/srm.conf. PR#3656.
  • With some browsers, Apache may not send a full response even though the file was updated on disk. This affects browsers which use HTTP/1.1 "etags" to ask servers for later versions of a file. Browsers known to do this are MSIE 4.1 and 5.0beta (older browsers used the modification time of the file). The problem is that Apache did not correctly compare the "etag" in the request with the "etag" of the file on disk (which will be different if the file has been updated). PR#3657.
  • When using ./configure with the --with-layout=GNU the directory layout may be different from the default layout in Apache 1.3.3. This only occurs if the "prefix" includes a directory component named "apache", and results in directories containing unnecessary "httpd" components. This was an effect of a new feature in Apache 1.3.4 which allowed for the executable name of Apache to be changed from "apache". PR#3666.
  • Compiler options starting with + cannot be used in EXTRA_CFLAGS in src/configuration. Most compilers use - for compiler options, but HP-UX's C compiler also uses +. PR#3681.
  • The INSTALL file shows examples of commands to start and stop the server using apachectl. However it assumes that this script is in the sbin directory, but the default is now bin. PR#3727.

Comments or criticisms? Please email us at editors@apacheweek.com