The open source Apache HTTP Server is the most widely used web server. FreeBSD does not install this web server by default, but it can be installed from the www/apache24 package or port.
This section summarizes how to configure and start version
2.x
of the Apache HTTP
Server, the most widely used version, on FreeBSD.
For more detailed information about
Apache 2.X and its configuration
directives, refer to httpd.apache.org.
In FreeBSD, the main Apache HTTP
Server configuration file is installed as
/usr/local/etc/apache2x/httpd.conf
.
This ASCII text file begins comment lines with the
#
. The most frequently modified directives
are:
ServerRoot "/usr/local"
Specifies the default directory hierarchy for the
Apache installation.
Binaries are stored in the
bin
and
sbin
subdirectories of the server root, and configuration
files are stored in etc/apache2x
.
ServerAdmin you@your.address
The email address to receive problems with the server. This address also appears on some server-generated pages, such as error documents.
ServerName www.example.com
Allows an
administrator to set a host name which is sent back to
clients for the server. For example,
www
can be used instead of the actual
host name.
DocumentRoot
"/usr/local/www/apache2x/data"
The directory where documents will be served from. By default, all requests are taken from this directory, but symbolic links and aliases may be used to point to other locations.
It is always a good idea to make backup copies of the
Apache configuration file before
making changes. When the configuration of
Apache, is complete, save the
file and verify the configuration using apachectl(8).
Running apachectl configtest
should return
Syntax OK
.
The www/apache24 port
installs an rc(8) script to aid in starting, stopping,
and restarting Apache, which can be
found in /usr/local/etc/rc.d/
.
To launch Apache at system
startup, add the following line to
/etc/rc.conf
:
apache24_enable="YES"
If Apache should be started
with non-default options, the following line may be added to
/etc/rc.conf
to specify the needed
flags:
apache24_flags=""
The Apache configuration can be
tested for errors after making subsequent configuration
changes while httpd
is running. This can
be done by the rc(8) script directly, or by the
service(8) utility by issuing one of the following
commands:
#
service apache24 configtest
It is important to note that the
configtest
is not an rc(8) standard,
and should not be expected to work for all rc(8)
startup scripts.
If Apache does not report
configuration errors, start httpd
with service(8):
#
service apache24 start
The httpd
service can be tested by
entering http://localhost
in a web browser, replacing
localhost
with the fully-qualified
domain name of the machine running httpd
,
if it is not the local machine. The default web page that is
displayed is
/usr/local/www/apache24/data/index.html
.
Apache supports two different types of Virtual Hosting. The first method is Name-based Virtual Hosting. Name-based virtual hosting uses the clients HTTP/1.1 headers to figure out the hostname. This allows many different domains to share the same IP address.
To setup Apache to use
Name-based Virtual Hosting add an entry like the following to
httpd.conf
:
NameVirtualHost *
If the webserver was named
www.domain.tld
and
a virtual domain for
www.someotherdomain.tld
then
add the following entries to
httpd.conf
:
<VirtualHost *> ServerName www.domain.tld DocumentRoot /www/domain.tld </VirtualHost> <VirtualHost *> ServerName www.someotherdomain.tld DocumentRoot /www/someotherdomain.tld </VirtualHost>
Replace the addresses with the addresses needed and the path to the documents with what are being used.
For more information about setting up virtual hosts,
please consult the official Apache
documentation at: http://httpd.apache.org/docs/vhosts/
.
There are many different Apache modules available to add functionality to the basic server. The FreeBSD Ports Collection provides an easy way to install Apache together with some of the more popular add-on modules.
The mod_ssl module uses the OpenSSL library to provide strong cryptography via the Secure Sockets Layer (SSL v2/v3) and Transport Layer Security (TLS v1) protocols. This module provides everything necessary to request a signed certificate from a trusted certificate signing authority to run a secure web server on FreeBSD.
The mod_ssl module is built
by default, but can be enabled by specifying
-DWITH_SSL
at compile time.
There are Apache modules for most major scripting languages. These modules typically make it possible to write Apache modules entirely in a scripting language. They are also often used as a persistent interpreter embedded into the server that avoids the overhead of starting an external interpreter and the startup-time penalty for dynamic websites, as described in the next section.
In the last decade, more businesses have turned to the Internet in order to enhance their revenue and increase exposure. This has also increased the need for interactive web content. While some companies, such as Microsoft®, have introduced solutions into their proprietary products, the open source community answered the call. Modern options for dynamic web content include Django, Ruby on Rails, mod_perl2, and mod_php.
Django is a BSD licensed framework designed to allow developers to write high performance, elegant web applications quickly. It provides an object-relational mapper so that data types are developed as Python objects, and a rich dynamic database-access API is provided for those objects without the developer ever having to write SQL. It also provides an extensible template system so that the logic of the application is separated from the HTML presentation.
Django depends on mod_python, Apache, and an SQL database engine. The FreeBSD Port will install all of these pre-requisites with the appropriate flags.
#
cd /usr/ports/www/py-django; make all install clean -DWITH_MOD_PYTHON3 -DWITH_POSTGRESQL
Once Django and these pre-requisites are installed, the application will need a Django project directory along with the Apache configuration to use the embedded Python interpreter. This will be the interpreter to call the application for specific URLs on the site.
A line must be added to the apache
httpd.conf
file to configure Apache
to pass requests for certain URLs to the web
application:
<Location "/"> SetHandler python-program PythonPath "['/dir/to/the/django/packages/'] + sys.path" PythonHandler django.core.handlers.modpython SetEnv DJANGO_SETTINGS_MODULE mysite.settings PythonAutoReload On PythonDebug On </Location>
Ruby on Rails is another open source web framework that provides a full development stack and is optimized to make web developers more productive and capable of writing powerful applications quickly. It can be installed easily from the ports system.
#
cd /usr/ports/www/rubygem-rails; make all install clean
The Apache/Perl integration project brings together the full power of the Perl programming language and the Apache HTTP Server. With the mod_perl2 module it is possible to write Apache modules entirely in Perl. In addition, the persistent interpreter embedded in the server avoids the overhead of starting an external interpreter and the penalty of Perl start-up time.
mod_perl2 is available in the www/mod_perl2 port.
PHP, also known as “PHP: Hypertext Preprocessor” is a general-purpose scripting language that is especially suited for Web development. Capable of being embedded into HTML its syntax draws upon C, Java™, and Perl with the intention of allowing web developers to write dynamically generated webpages quickly.
To gain support for PHP5 for the Apache web server, begin by installing the lang/php5 port.
If the lang/php5
port is being installed for the first time, available
OPTIONS
will be displayed automatically.
If a menu is not displayed, i.e., because the lang/php5 port has been installed
some time in the past, it is always possible to bring the
options dialog up again by running:
#
make config
in the port directory.
In the options dialog, check the
APACHE
option to build
mod_php5 as a loadable module for
the Apache web server.
A lot of sites are still using PHP4 for various reasons (i.e., compatibility issues or already deployed web applications). If the mod_php4 is needed instead of mod_php5, then please use the lang/php4 port. The lang/php4 port supports many of the configuration and build-time options of the lang/php5 port.
This will install and configure the modules required
to support dynamic PHP applications.
Check to ensure the following sections have been added to
/usr/local/etc/apache22/httpd.conf
:
LoadModule php5_module libexec/apache/libphp5.so
AddModule mod_php5.c <IfModule mod_php5.c> DirectoryIndex index.php index.html </IfModule> <IfModule mod_php5.c> AddType application/x-httpd-php .php AddType application/x-httpd-php-source .phps </IfModule>
Once completed, a simple call to the
apachectl
command for a graceful
restart is needed to load the PHP
module:
#
apachectl graceful
For future upgrades of PHP, the
make config
command will not be required;
the selected OPTIONS
are saved
automatically by the FreeBSD Ports framework.
The PHP support in FreeBSD is extremely modular so the base install is very limited. It is very easy to add support using the lang/php5-extensions port. This port provides a menu driven interface to PHP extension installation. Alternatively, individual extensions can be installed using the appropriate port.
For instance, to add support for the
MySQL database server to
PHP5, simply install the port
databases/php5-mysql
.
After installing an extension, the Apache server must be reloaded to pick up the new configuration changes:
#
apachectl graceful
All FreeBSD documents are available for download at http://ftp.FreeBSD.org/pub/FreeBSD/doc/
Questions that are not answered by the
documentation may be
sent to <freebsd-questions@FreeBSD.org>.
Send questions about this document to <freebsd-doc@FreeBSD.org>.