The Apache software is built in a modular fashion: all functionality except some core tasks is handled by modules. This has progressed so far that even HTTP is processed by a module (http_core).
Apache modules can be compiled into the Apache binary at build time or dynamically loaded at runtime. Refer to Section 41.4.2, “Activation and Deactivation” for details of how to load modules dynamically.
Apache modules can be divided into four different categories:
Base modules are compiled into Apache by default. Apache in SUSE Linux has only mod_so (needed to load other modules) and http_core compiled in. All others are available as shared objects: rather than being included in the server binary itself, they can be included at runtime.
In general, modules labeled as extensions are included in the Apache software package, but are usually not compiled into the server statically. In SUSE Linux, they are available as shared objects that can be loaded into Apache at runtime.
Modules labeled external are not included in the official Apache distribution. SUSE Linux provides several of them readily available for use.
MPMs are responsible for accepting and handling requests to the Web server, representing the core of the Web server software.
If you have followed the default way of installing Apache (described in Section 41.1.2, “Installation”), it is installed with all base and extension modules, the multiprocessing module Prefork MPM, and the external module PHP5.
You can install additional external modules by starting YaST and choosing apache. Among other packages, the result list contains all available external Apache modules.
+ . Now choose + and search forUsing YaST, you can activate or deactivate the script language modules (PHP5, Perl, Python, and Ruby) with the module configuration described in Section 41.2.2.1, “HTTP Server Wizard”. All other modules can be enabled or disabled as described in Section 41.2.2.2.2, “Server Modules”.
If you prefer to activate or deactivate the modules manually, use the
commands a2enmod mod_foo
or a2dismod mod_foo
,
respectively.
a2enmod -l outputs a list of all currently active
modules.
![]() | Including Configuration Files for External Modules |
---|---|
If you have activated external modules manually, make sure to load
their configuration files in all virtual host
configurations. Configuration files for external modules are located
under |
All base and extension modules are described in detail in the Apache documentation. Only a brief description of the most important modules is available here. Refer to http://httpd.apache.org/docs/2.2/mod/ to learn details about each module.
Provides Alias
and
Redirect
directives with which you can
map a URl to a specific directory
(Alias
) or redirect a requested URL to
another location. This module is enabled by default.
The authentication modules provide different authentication methods: basic authentication with mod_auth_basic or digest authentication with mod_auth_digest. Digest authentication in Apache 2.2 is considered experimental.
mod_auth_basic and mod_auth_digest must be combined with an authentication provider module, mod_authn_* (for example, mod_authn_file for text file–based authentication) and with an authorization module mod_authz_* (for example, mod_authz_user for user authorization).
More information about this topic is available in the “Authentication howto” at http://httpd.apache.org/docs/2.2/howto/auth.html
Autoindex generates directory listings when no index file (for
example, index.html
) is present. The look and
feel of these indexes is configurable. This module is enabled by
default. However, directory listings are disabled by default via
the Options
directive—overwrite
this setting in your virtual host configuration. The default
configuration file for this module is located at
/etc/apache2/mod_autoindex-defaults.conf
.
mod_cgi is needed to execute CGI scripts. This module is enabled by default.
Using this module, Apache can be configured to compress given file types on the fly before delivering them.
mod_dir provides the DirectoryIndex
directive with which you can configure which files are
automatically delivered when a directory is requested
(index.html
by default). It also provides an
automatic redirect to the correct URl when a directory request
does not contain a trailing slash. This module is enabled by
default.
With mod_expires, you can control how often proxy and browser
caches refresh your documents by sending an
Expires
header. This module is enabled
by default.
mod_include lets you use Server Side Includes (SSI), which provide a basic functionality to generate HTML pages dynamically. This module is enabled by default.
Provides a comprehensive overview of the server configuration
under http://localhost/server-info/. For security reasons, you
should always limit access to this URL. By default only
localhost
is allowed
to access this URL. mod_info is configured at
/etc/apache2/mod_info.conf
With this module, you can configure the looks of the Apache log files. This module is enabled by default.
The mime module takes care that a file is delivered with the
correct MIME header based on the filename's extension (for
example text/html
for HTML documents).
This module is enabled by default.
Necessary for content negotiation. See http://httpd.apache.org/docs/2.2/content-negotiation.html for more information. This module is enabled by default.
Provides the functionality of mod_alias, but offers more features and flexibility. With mod_rewrite, you can redirect URLs based on multiple rules, request headers, and more.
mod_speling attempts to automatically correct typographical errors in URLs, such as capitalization errors.
Enables encrypted connections between Web server and clients. See Section 41.6, “Setting Up a Secure Web Server with SSL” for details. This module is enabled by default.
Provides information on server activity and performance under
http://localhost/server-status/. For security reasons, you
should always limit access to this URL. By default, only
localhost
is allowed
to access this URl. mod_status is configured at
/etc/apache2/mod_status.conf
mod_suexec lets you run CGI scripts under a different user and group. This module is enabled by default.
Enables user-specific directories available under
~
. The
user
/UserDir
directive must be specified in
the configuration. This
module is enabled by default.
SUSE Linux Enterprise Server provides two different multiprocessing modules (MPMs) for use with Apache.
The prefork MPM implements a nonthreaded, preforking Web server. It makes the Web server behave similarly to Apache version 1.x in that it isolates each request and handles it by forking a separate child process. Thus problematic requests cannot affect others, avoiding a lockup of the Web server.
While providing stability with this process-based approach, the prefork MPM consumes more system resources than its counterpart, the worker MPM. The prefork MPM is considered the default MPM for Unix-based operating systems.
![]() | MPMs in This Document |
---|---|
This document assumes Apache is used with the prefork MPM. |
The worker MPM provides a multithreaded Web server. A thread is a “lighter” form of a process. The advantage of a thread over a process is its lower resource consumption. Instead of only forking child processes, the worker MPM serves requests by using threads with server processes. The preforked child processes are multithreaded. This approach makes Apache perform better by consuming fewer system resources than the prefork MPM.
One major disadvantage is the stability of the worker MPM: if a thread becomes corrupt, all threads of a process can be affected. In the worst case, this may result in a server crash. Especially when using the Common Gateway Interface (CGI) with Apache under heavy load, internal server errors might occur due to threads unable to communicate with system resources. Another argument against using the worker MPM with Apache is that not all available Apache modules are thread-safe and thus cannot be used in conjunction with the worker MPM.
![]() | Using PHP Modules with MPMs |
---|---|
Not all available PHP modules are thread-safe. Using the worker MPM with mod_php is strongly discouraged. |
Find a list of all external modules shipped with SUSE Linux Enterprise Server here. Find the module's documentation in the listed directory.
FastCGI is a language-independent, scalable, and open extension to CGI that provides high performance without the limitations of server-specific APIs. FastCGI applications are very fast because they are persistent. There is no per-request start-up and initialization overhead.
Package Name: apache2-mod_fastcgi
|
Configuration File: /etc/apache2/conf.d/mod_fastcgi.conf
|
More Information: /usr/share/doc/packages/apache2-mod_fastcgi
|
mod_perl enables you to run Perl scripts in an embedded interpreter. The persistent interpreter embedded in the server avoids the overhead of starting an external interpreter and the penalty of Perl start-up time.
Package Name: apache2-mod_perl
|
Configuration File: /etc/apache2/conf.d/mod_perl.conf
|
More Information: /usr/share/doc/packages/apache2-mod_perl
|
PHP is a server-side, cross-platform HTML embedded scripting language.
Package Name: apache2-mod_php5
|
Configuration File: /etc/apache2/conf.d/php5.conf
|
More Information:
/usr/share/doc/packages/apache2-mod_php5
|
mod_python allows embedding Python within the Apache HTTP server for a considerable boost in performance and added flexibility in designing Web-based applications.
Package Name: apache2-mod_python
|
More Information: /usr/share/doc/packages/apache2-mod_python
|
mod_ruby embeds the Ruby interpreter into the Apache Web server, allowing Ruby CGI scripts to be executed natively. These scripts start much faster than without mod_ruby.
Package Name: apache2-mod_ruby
|
More Information: /usr/share/doc/packages/apache2-mod_ruby
|
This module provides connectors between Apache and a Tomcat Servlet Container.
Package Name: mod_jk-ap20
|
More Information: /usr/share/doc/packages/mod_jk-ap20
|
Apache can be extended by advanced users by writing custom modules. To
develop modules for Apache or compile third-party modules,
the package apache2-devel
is required along
with the corresponding development tools.
apache2-devel
also contains the
apxs2 tools, which are necessary for compiling
additional modules for Apache.
apxs2 enables the compilation and installation of modules from source code (including the required changes to the configuration files), which creates dynamic shared objects (DSOs) that can be loaded into Apache at runtime.
The apxs2 binaries are located under
/usr/sbin
:
/usr/sbin/apxs2
—suitable for building
an extension module that works with any MPM. The installation
location is /usr/lib/apache2
.
/usr/sbin/apxs2-prefork
—suitable for
prefork MPM modules. The installation location is
/usr/lib/apache2-prefork
.
/usr/sbin/apxs2-worker
—suitable for
worker MPM modules.
apxs2 installs modules so they can be used for all
MPMs. The other two programs install modules so they can only be used
for the respective MPMs. apxs2 installs modules in
/usr/lib/apache2
,
apxs2-prefork and apxs2-worker
installs modules in /usr/lib/apache2-prefork
or
/usr/lib/apache2-worker
.
Install and activate a module from source code with the commands
cd /path/to/module/source; apxs2 -cia
mod_foo
.c (-c
compiles the module, -i
installs it, and
-a
activates it). Other options of
apxs2 are described in the
apxs2(1)
man page.