Apache

The Apache HTTP Server is an efficient and extensible web server and one of the most popular ones used the Internet.

Support in other packages
There is a global USE flag apache2 which enables support for Apache in other packages. This may cause to be pulled in automatically if such packages are used.

After setting this you want to update your system so the changes take effect:

OpenRC
Start the Apache server:

Add Apache to the default runlevel:

Restart the Apache service:

Reload Apache configuration files:

systemd
Start the Apache server:

Add Apache to the default runlevel:

Restart the Apache service:

Testing
Verifying IP interfaces and ports on which apache2 is running on and listening to:

Testing if a connection to a Apache server is working on localhost:

Interrupt the connection test with + and.

Configuration files
There are 2 main files that configure Apache2's behavior on the system:


 * Gentoo's apache2 init script configuration file


 * Apache server's conventional configuration file

Gentoo's init script configuration file
The only active line in this file is as follow :

This line defines options that will be interpreted by the various configuration files using the   statement to activate or deactivate some part of the whole configuration. We will come back to this where appropriate in the rest of this guide.

Apache server's conventional configuration file - httpd.conf
In fact this file is only an entry point as the whole configuration is split in many files in the directory, that are assembled  together using the   directive. For example, the statement, in , aims at including all the files in  which name ends with.

Taking into account what has been said in the subsection above, and as module configuration files (files in ) almost always start with the, the content of one file inside , will ONLY be assembled with the rest of the configuration, if the matching option is set using a   flag in the APACHE2_OPTS variable in the  file. The configuration file is an exception to this rule as it doesn't start with an   statement and therefore is always included in the resulting configuration.

Default configuration
After a fresh install of apache server, the configuration resulting from the assemblage of the different configuration files is as follows. We start with the entry point.

First sign of life
As you can see in the initial configuration above, the pre-installed virtual host's    directory is, its server name is localhost. In addition an index.html file is provided in the  directory, thus to check whether everything is correctly installed or not, point your browser to http://localhost/.

You should see an "It works !" message on the page.

Enabling Security Module
Control this module by editing and  and restarting apache.

Enabling PHP support
Install PHP with the apache2 USE flag and enable the module:

Before testing if the PHP module works, check that the file exists and contains the following definition:

If it doesn't exist create it yourself.

To test if the PHP module works, create a test page:

Now, suppress or rename and open the test page: http://localhost/. You should see a table describing the PHP settings

Adding your own virtual hosts
For each virtual host, provide a  directory that is reachable and accessible by the Apache daemon. Add a virtual host configuration file in the  directory which uses this   and the virtual host server name, and don't forget to add an entry for this domain name in.

To assign the apache user/group ownership on the virtual host files, use  like in the following example:

Below are two example virtual host definitions, one for domainname1.com and one for domainname2.com. Notice the different  and   directives even though the host itself  remains the same:

It is recommended to provide an IP based virtual host definition as well. This allows the administrator to put up a message for users that try to reach a site through its IP address:

After inserting virtual hosts, the server needs to be (gracefully) restarted for the new sites to become active.

Enabling PHP through fcgid
Install and. The PHP package requires the cgi USE flag:

Edit the file:

Create the needed directory:

Symlink it for the PHP wrapper:

Enable the fcgid module:

Finally restart Apache and check the  site created earlier. The value of  should be CGI/FastCGI

Enabling PHP-FPM through mod_proxy_fcgi in Apache 2.4
With PHP 5.3 and above, PHP supports an additional mode, FastCGI Process Manager, or FPM.

The following method relies on the FilesMatch directive and be placed within the main server config or VirtualHosts. The location of the UNIX socket is determined by the listen directive in the, allowing for specifying separate pools per site/function.

In the following example, it is placed within the PHP module config file.:

Then enable both the PHP and proxy modules:

Troubleshooting

 * Troubleshooting guide

Common Issues
When starting apache, you might get the following error:

apache2: apr_sockaddr_info_get failed for SomeHostname

When this occurs, add your host name to the file.

External resources

 * Slicehost article: Installing Apache on Gentoo
 * Slicehost article: Apache configuration files on Gentoo
 * Slicehost article: Configuring the Apache MPM on Gentoo
 * Slicehost article: Apache configuration on Gentoo
 * Slicehost article: Apache Virtual Hosts on Gentoo
 * Slicehost article: Enabling and using apache's mod_status on Gentoo
 * apache.org documentation
 * Apache2 mod_pagespeed