Compile Apache HTTPD 2.4.X & PHP

1. What Is Needed / Requirements

Compiling apache from source is very easy you have to follow some steps. In case of almost all linux distributions Apache http server can be installed via its package manager.
There are some advantages of compiling Apache (or any other application) from source, but If you don't have any special requirement I advise to install Apache from package manager. But yet in certain cases you have to compile from source:

  • You do not have root access. In this case it will be hard to install the necessary packages. :) But If every needed packages are installed you can compile apache. And run it with your own user. If you install apache from package manager, apache will write its log files with root user, and the config files will be writable for only root user. Of course you can give (r/w) permission to other user to these files. I think this scenario is rare, and without root access your possibilities are very limited.
  • You can install different version of the application, which cannot be install via package manager.
  • You can complie the application with certain flags and options which may be missing in the repository.


  • You have to install all dependencies manually.
  • Your package manager will unaware of the changes.
  • Your applications will have to be updated manually.
  • Maybe you package manager will be overwrite the dependencies.

In my case I had to install the following packages:

  • apt-get install libpcre3-dev
  • apt-get install libxml2-dev

My OS:
Debian GNU/Linux 8
Linux vps10 2.6.32-042stab116.2 #1 SMP Fri Jun 24 15:33:57 MSK 2016 x86_64 GNU/Linux

These packages must be downloaded:

2. Preparation

I created a certain user which will be used all over the whole install process and this user will run the apace process.

adduser apache2  
mkdir /opt/apache2  
chown apache2:apache2 /opt/apache2/  

I modified this user's shell to /bin/false and home directory to /opt/apache2.

root@vps10:/home/vinyo# cat /etc/passwd|grep apa  

So this user won't be able to login to the linux box, but you can use sudo to switch to apache2 user:
sudo -u apache2 bash

3. Download the necessary sources

I put all sources to: /opt/apache2/sources

cd /opt/apache2/  
mkdir sources  
cd sources/  

4. Compile Apache whit apr and apr-util

  • First you have to untar the apache source
cd /opt/apache2/sources/  
tar xf httpd-2.4.23.tar.gz  
  • Untar apr, apr-util
cd /opt/apache2/sources/httpd-2.4.23/srclib  
tar xf /opt/apache2/sources/apr-1.5.2.tar.gz  
tar xf /opt/apache2/sources/apr-util-1.5.4.tar.gz  
  • Rename APR directories
mv apr-1.5.2 apr  
mv apr-util-1.5.4 apr-util  
  • Compile Apache
cd /opt/apache2/sources/httpd-2.4.23  
./configure  --enable-mpms-shared=all --enable-ssl --prefix=/opt/apache2/httpd-2.4.23
make install  

Apache will be installed to /opt/apache2/httpd-2.4.23.
After the make install command you can start you newly installed apache httpd server.
But if you try to start apache you will be get this error:

apache2@vps10:/opt/apache2/httpd-2.4.23/bin$ ./apachectl start  
(13)Permission denied: AH00072: make_sock: could not bind to address [::]:80
(13)Permission denied: AH00072: make_sock: could not bind to address
no listening sockets available, shutting down  
AH00015: Unable to open logs  

Yes, only root user can bind ports below 1025. So we have to modify listen port in /opt/apache2/httpd-2.4.23/conf/httpd.conf file.
From: Listen 80
To: Listen 8080
After that little modification apache can be started. Check the log file:

cat /opt/apache2/httpd-2.4.23/logs/error_log  
[Sat Aug 27 12:02:53.021908 2016] [mpm_event:notice] [pid 30164:tid 140121349551872] AH00489: Apache/2.4.23 (Unix) PHP/5.6.25 configured -- resuming normal operations
[Sat Aug 27 12:02:53.021972 2016] [core:notice] [pid 30164:tid 140121349551872] AH00094: Command line: '/opt/apache2/httpd-2.4.23/bin/httpd'

Now your apache web server is accessible on port 8080, you can call it from your browser.

4. Install PHP

  • Previously we downloaded the php source, now untar it:
cd /opt/apache2/sources  
tar xf php-5.6.25.tar.gz  
  • Compile
./configure --with-apxs2=/opt/apache2/httpd-2.4.23/bin/apxs --with-mysql --prefix=/opt/apache2/php-5.6.25
make install  

This will create a new directory: /opt/apache2/php-5.6.25 This is the install path of php.
During the installation php will modify your apache configuration to load php module:
LoadModule php5_module modules/ And you can find the php module in apache modules directory:

apache2@vps10:/opt/apache2/httpd-2.4.23/modules$ ls -al | grep php  
-rwxr-xr-x  1 apache2 apache2 28575008 Aug 27 09:09

Before you restart your apache2 instance place your php.ini to the appropriate place:
apache2@vps10:/opt/apache2/php-5.6.25/lib$ cp /opt/apache2/sources/php-5.6.25/php.ini-production php.ini

To check if php is working place info.php file to your htdocs directory with this content:

apache2@vps10:/opt/apache2/httpd-2.4.23/htdocs$ cat info.php  

You can call this file using lynx:

lynx --dump http://localhost:8080/info.php | grep php.ini  
   Configuration File (php.ini) Path /opt/apache2/php-5.6.25/lib
   Loaded Configuration File /opt/apache2/php-5.6.25/lib/php.ini

5. Summary

As you can see "compiling apache from source" consist of a few steps, but after that if you need any additional php module you will have to install them manually by:

  • Using /opt/apache2/php-5.6.25/bin/pear
  • Using /opt/apache2/php-5.6.25/bin/pecl
  • Compile from source (phpize, configure, make, make install)

If you can afford, consider using your package manager to install apache & php, because it is much simpler and in most cases you won't need to compile from source.

Vincze Janos Istvan

Read more posts by this author.


Subscribe to Blog

Get the latest posts delivered right to your inbox.

or subscribe via RSS with Feedly!