Gnu/Linux‎ > ‎Servidores‎ > ‎

Servidor Web con PHP y Apache

publicado a la‎(s)‎ 9 sept. 2016 5:36 por Juan Jose Ramirez Lama   [ actualizado el 12 sept. 2017 12:07 ]

¿Qué es un Servidor Web?

Un servidor web como su nombre lo indica, es un software instalado en el equipo con todas las condiciones necesarias para servir o entregar páginas web que le sean solicitadas por un navegador, asegurando que se muestren y representen todos los elementos necesarios para su correcto funcionamiento y visualización.

Existen varios tipos de servidores web, Apache es un software de código abierto, libre de uso y totalmente configurable, es en este momento el más utilizado en la red, ya sea en plataformas Linux, Mac o Windows.

Al instalarlo en nuestra equipo dispondremos de un servidor completo, con todos los requisitos para ejecutarlo de forma local.


Partiendo desde la instalación del sistema operativo Debian GNU/Linux podemos ahora montar un servidor que ofrezca varios servicios a terceros como por ejemplo Servidor Web Apache 2 compatible con PHP, FTP, bases de datos, entre otros servicios.

Estos tipos de servidores los podemos usar solos en una maquina o en conjunto para que nuestro servidor sea más o menos completo. Recuerda que cuantos más servicios ofrezcamos más potente tiene que ser la maquina para poder dar a basto con todo.

Respecto a la compatibilidad de este frente a clientes con Linux, Windows o Mac va a ser total con lo que podremos compartir todos los servicios sin problemas como pueden ser la impresora o los archivos, directorios particiones que compartamos con nuestra red, entre otros.

Hardware Necesario

Podemos llamar servidor a toda maquina que este conectada a la red y ofrezca diferentes servicios a los usuarios de la misma. Para esto necesitamos Hardware suficiente para montar un computador que pueda cumplir nuestras necesidades.

El uso que le vamos a dar a esta maquina es exclusivamente la de servidor así que voy a prescindir de usar entorno gráfico para ahorrar recursos en nuestra maquina. Esto no quiere decir que no necesitemos una tarjeta gráfica y un monitor si no que no necesitamos una tarjeta gráfica muy potente y el monitor pues da lo mismo ya que operaremos con ella en modo Terminal. También vamos a prescindir del tema del sonido, por lo que no voy a instalarle ninguna tarjeta de sonido. 

En un servidor Web el Hardware más potente que tiene que haber en la maquina es el procesador y la memoria ram sin duda alguna. De ellos dos depende el funcionamiento de todo una vez empecemos a sobrecargar el sistema con programas y usuarios conectados a el, así que cuanto mas tengamos de esto mejor.

Necesitamos minimamente:
    • Placa base (2 Puertos USB)
    • Microprocesador (mínimo 500 Mhz)
    • Tarjeta gráfica
    • Tarjeta de red 10/100 por lo menos
    • Memoria Ram (mínimo 512mb)
    • Disco duro (10Gb mínimo)
    • Lector de CD/DVD o usb libres para cargar el SO.
Con este Hardware es suficiente para un servidor casero, funciona a la perfección para uso personal pero no para profesional.

Una vez Instalado el servidor lo primero que recomiendo es que actualicen los paquetes.
sudo apt-get update
sudo apt-get upgrade

Configuración de Red

En la instalación del sistema operativo se nos configuró automáticamente el servicio DHCP para que nuestro router nos asigne automáticamente una IP. Eso esta muy bien y nos ha sido muy cómodo ya que no hemos tenido que configurar nuestra tarjeta de red para nada durante la instalación del sistema, pero vamos a tener que configurarla manualmente para que nuestro servidor sea accesible desde cualquier lugar.
 
¿Porque? Pues muy sencillo, Vamos a necesitar que nuestra tarjeta de red tenga una IP estática ya que cuando compartamos un ervicio Web o Ftp deberemos abrir y redireccionar el puerto 80 para el Web y el 21 para el Ftp hacia nuestro servidor y por consecuente a una IP, que a continuación la configuraremos para que podamos hacerlo.

Lo primero que haremos será iniciar el servidor y accederemos a una Terminal, donde habrá que logearse como root.

Vamos a hacer algunas comprobaciones y configuraciones para asegurarnos de que tenemos bien configurada la red además de tener acceso a Internet desde este servidor.

Para empezar vamos a asignarle una IP fija a nuestra maquina, esto es necesario porque si vamos a ofrecer servicios hacia Internet deberemos abrir puertos y asignarlos a una IP fija desde el Router.  Si por el contrario tenemos la asignación IP de forma automática con DHCP no podremos asignar "X "puerto a "Y" IP. Con lo cual es completamente necesario que nuestra tarjeta de red tenga una IP fija.

Durante la instalación el sistema quedo con una IP asignada de modo automático (DHCP) por el Router. Comprobemos si tenemos salida a Internet mandando unos pings, por ejemplo a Google.

Si en la terminal tecleamos:
$ ping www.google.com
Debería responder algo como lo siguiente, si es así, es que tenemos IP.
PING www.google.com (64.233.186.105): 56 data bytes
64 bytes from 64.233.186.105: icmp_seq=0 ttl=43 time=19.543 ms
64 bytes from 64.233.186.105: icmp_seq=1 ttl=43 time=25.960 ms
64 bytes from 64.233.186.105: icmp_seq=2 ttl=43 time=18.283 ms
Salimos del ping con Control + c.

Ahora vamos a ver de que rango es la IP que nuestro Router nos asigno en el arranque ejecutando el comando ifconfig.
sudo ifconfig
 Veremos algo parecido a esto:
sudo ifconfig
eth0      Link encap:Ethernet  HWaddr 08:00:27:bd:ef:d7  
          inet addr:10.1.15.148  Bcast:10.1.255.255  Mask:255.255.0.0
          inet6 addr: fe80::a00:27ff:febd:efd7/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:315721 errors:0 dropped:24 overruns:0 frame:0
          TX packets:220 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:19355675 (18.4 MiB)  TX bytes:25903 (25.2 KiB)
Como podemos ver, mi Router tiene activado el modo DHCP y me asigno automaticamente la IP 10.1.15.148 por lo que con ella sabemos el rango que debemos usar para nuestra IP fija es de 10.1.15.148.x.

Asignando IP Estática

Siempre que modifiquemos un archivo del sistema para configurarlo tenemos que tener en cuenta que es necesario hacer una copia de seguridad del mismo para que podamos guiarnos de él en un momento dado o restaurarlo en cualquier caso. A continuación haremos una copia del archivo llamado interfaces que está situado en la ruta /etc/network y seguidamente lo editaremos para indicarle que IP fija es la que va a tener nuestro servidor.
sudo cp /etc/network/interfaces /etc/network/interfacesOLD
Una vez creada la copia vamos a editar el archivo interfaces con el editor de texto más sencillo de todos que viene por defecto en casi todas las distribuciones GNU/Linux llamado nano.
sudo nano -w /etc/network/interfaces
 Veremos que el documento es así:
GNU nano 2.2.6         File: /etc/network/interfaces                          

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
allow-hotplug eth0
iface eth0 inet dhcp

              [ Read 16 lines ]
Como pueden ver, a nuestra tarjeta de red se le asigna una IP automática gracias a la linea iface eth0 inet dhcp

A continuación vamos a introducirle los siguientes parámetros para configurar manualmente la tarjeta de red. Para empezar vamos a cambiar el texto dhcp por la  palabra static y a continuación especificaremos cual va a ser nuestra IP fija, mascara de subred, puerta de enlace o gateway (router) y resolvedor de nombres DNS.

Para conocer cuales son los datos a obtener que necesitaremos llenar solo debemos teclear ifconfig en la terminal. Donde aparecerán cada uno de los dispositivos de red del equipo, buscamos el que dice eth0 y anotamos:
$ ifconfig
  • La IP o address (inet addr)
  • El broadcast (Bcast)
  • La Mascara de Red o netmask (Mask)
  • La red o network es la IP pero terminada en 0
Para saber el gateway tecleamos:
$ ip route show
Por último el servidor DNS o nameserver, para este yo utilizo las asignadas por \url{opendns.org} o puedes usar las que se encuentran en:
$ cat /etc/resolv.conf

A continuación expongo la configuración estática para este ejemplo, la cual no necesariamente tiene que ser igual que la mía, puede variar dependiendo de sus rangos de IP y proveedor de internet para el apartado DNS.
auto lo
iface lo inet loopback

# The primary network interface
allow-hotplug eth0
#iface eth0 inet dhcp

auto eth0
iface eth0 inet static

    address 10.1.15.148
    netmask 255.255.0.0
    network 10.1.15.0
    broadcast 10.1.255.255
    gateway 10.1.0.1
    nameserver 208.67.222.222 208.67.220.220

             [ Read 16 lines ]

Como ven, le he asignado la IP 10.1.15.148. Respecto a los servidores DNS he usado las direcciones de http://www.opendns.org  un servicio de resolvedores de nombres que nos ofrecen gratuitamente desde Internet.
 
Una vez hechas todas las modificaciones al archivo interfaces guardamos el archivo y salimos del editor nano.

A continuación vamos a reiniciar la red para que los cambios surjan efecto.
sudo /etc/init.d/networking restart
[ ok ] Restarting networking (via systemctl): networking.service.  

Ahora deberíamos tener la IP que configuramos anteriormente. Esto podemos verlo ejecutando el comando ip addr.
sudo ip addr
Ahora cada vez que arranquemos tendremos la misma IP y no una dinámica como antes, también puedes hacer un ping para verificar que tengas internet. 

Servidor Web Apache


Crearemos el grupo "www-data".  Para ello ejecutaremos los siguientes comandos:
sudo groupadd www-data
sudo usermod -a -G www-data www-data

A partir de aquí empieza la instalación de Apache:
sudo apt-get install apache2

En Debian usaremos el programa Apache Web Server en su versión apache2-mpm-prefork que es la recomendada para Debian por su Multi-Processing Module (MPM) ya que es considerablemente más rápido que el modelo tradicional.
sudo apt-get install apache2-mpm-prefork #Para Debian solamente
sudo a2enmod mpm_prefork #Solo si instalaste el paquete mpm-prefork

Una vez finalizada la instalación abrimos un navegador en nuestro PC de escritorio e introducimos la IP del servidor http://localhost (en este ejemplo http://192.168.11.111) y veremos el mensaje It works!.
Este mensaje quiere decir que el servidor Web Apache está funcionando y listo para servir contenido Web.

El directorio hacia donde apunta el servidor Web Apache por defecto es a /var/www/Este directorio podemos usarlo, pero cada vez que deseemos añadir nuevos archivo, necesitaremos tener permisos de root o cambiarle los permisos a ese directorio para poder usarlo. De todas formas no es recomendable usarlo, ya que cualquier ataque que pudiésemos recibir, es el principal destino de ataque, ya que es un directorio universal. 

Para eliminar un poco esta brecha de seguridad es recomendable cambiar el directorio que reconoce por defecto apache, para que apunte a uno de los directorios que tenemos en nuestro home. 

Directorio Web independiente por cada usuario

Para poder asignar a cada usuario del sistema un directorio para publicar sus paginas web es necesario verificar si tenemos los archivos userdir.conf y userdir.loaden /etc/apache2/mods-available, para comprobar esto, tecleamos el siguiente comando el cual debería entregar el mismo mensaje que aquí:
$ ls /etc/apache2/mods-available/userdir*
/etc/apache2/mods-available/userdir.conf
/etc/apache2/mods-available/userdir.load
Una vez comprobado esto, debemos comprobar si tenemos esos mismos archivos en el directorio /etc/apache2/mods-enabled, esto lo comprobamos con el siguiente comando:
$ ls /etc/apache2/mods-enabled/userdir*
Si arroja que no tenemos nada o que no existe continuamos.

Si no apareció ningún resultado con el comando anterior debes teclear los siguientes 3 comando de a continuación. (si apareció resultado, omite el primer comando).
sudo ln -s /etc/apache2/mods-available/userdir* /etc/apache2/mods-enabled/
sudo a2enmod userdir
$ ls -la /etc/apache2/mods-enabled/userdir*
/etc/apache2/mods-enabled/userdir.conf  
/etc/apache2/mods-enabled/userdir.load
El último comando revisa si están ahora los 2 archivos antes mencionados, cosa que debería aparecer.

Si todo esta correcto ahora hay que reiniciar apache.
sudo /etc/init.d/apache2 restart

Una vez hecho esto, falta añadir en la carpeta personal de cada usuario un directorio que se llame public_html este será el directorio donde cada usuario deberá publicar sus paginas web. Lo primero que haremos es crear el directorio para el usuario que estamos ahora (NO HACER ESTO COMO ROOT)
$ mkdir ~/public_html

Ahora vamos a crear una pagina web html sencilla para comprobar que funcione.
$ echo '<html><body><p><strong>Hola Mundo</strong></p></body></html>' > ~/public_html/index.html

Luego en el navegador tecleamos una ruta como la siguiente (IPServer/~TU_USARIO):
10.1.15.148/~juaramir
O desde la terminal podemos teclear ($USER es el nombre de tu usuario):
$ iceweasel 10.1.15.148/~$USER
$ links2 10.1.15.148/~$USER

Veremos algo como esto.

Habilitar Python en Apache2

Modificamos la configuración del servidor para habilitar el soporte para código python.
sudo nano /etc/apache2/conf-enabled/serve-cgi-bin.conf
Ahora buscamos la línea </Directory> y añadimos lo siguiente sobre esta
AddHandler cgi-script .py          # add this line (there is a blank between cgi-script and .py)
El directorio por defecto para los script cgi es /usr/lib/cgi-bin/, por lo que usaremos este directorio. Creamos un script.
sudo nano /usr/lib/cgi-bin/pytest.py
Añadimos lo siguiente:
#!/usr/bin/python

import cgi
import cgitb
cgitb.enable()

print 'Content-type: text/html\n\n'
print '<h1>Python Script Test</h1>'
Hacemos el código ejecutable
sudo chmod +x /usr/lib/cgi-bin/pytest.py
Reiniciamos Apache
sudo /etc/init.d/apache2 restart
Ahora para abrir la página lo hacemos desde localhost/cgi-bin/pytest.py.

Virtual Host y Dominios

Preparando los Directorios

Después de haber realizado uno de los procedimientos anteriores comenzaremos a crear el Host Virtual. En este ejemplo crearemos 2 host, los cuales son ejemplo.com y pruebas.com.

Asumiré que aplicaste el método de multiples usuario (Opción 1) pero la configuración la haremos con un solo usuario. Lo primero que debemos hacer es crear los directorios que contendrán las distintas paginas por cada sitio.
 $ mkdir -p ~/public_html/ejemplo.com/
 $ mkdir -p ~/public_html/pruebas.com/

Si por algún motivo decidiste hacer la opción para un único usuario (Opción 2 o 3) debes crear los directorios así:
# mkdir -p /var/www/ejemplo.com/public_html
# mkdir -p /var/www/pruebas.com/public_html
Luego darle permisos al directorio
# chown -R USUARIO:GRUPO /var/www/ejemplo.com/public_html
# chown -R USUARIO:GRUPO /var/www/pruebas.com/public_html
# chmod -R 755 /var/www
Para los casos de este ejemplo cambiar ~/public_html/ por /var/www/si deseas trabajar para único usuario, pero todo este manual esta enfocado a la opción 1. 

Creando Páginas de Prueba

Creamos la página de prueba para el dominio ejemplo.com:
$ nano ~/public_html/ejemplo.com/index.html
Añadimos el Código
<html>
 <head>
  <title>Bienvenido a Ejemplo.com!</title>
 </head>
 <body>
  <h1>&Eacute;xito! El Virtual Host ejemplo.com esta funcionando!</h1>
 </body>
</html>
Guarda y Cierra el Archivo

Ahora en vez de volver a hacer lo mismo para el dominio prueba.com, reutilizaremos código y luego lo editaremos.
$ cp ~/public_html/ejemplo.com/index.html ~/public_html/pruebas.com/index.html
$ nano ~/public_html/pruebas.com/index.html
Reemplaza el texto Ejemplo.com por Pruebas.com, luego guarda y cierra.

Crear Archivos Virtual Host

Los archivos Virtual Host son archivos que contienen información y configuración específica para el dominio y que le indican al servidor Apache como responden a las peticiones de varios dominios. Apache (2.4 en adelante) incluye un archivo Virtual Host por defecto denominado 000-default.conf que podemos usar para saltarnos al punto. 

Realizaremos una copia para trabajar sobre ella y crear nuestro Virtual Host para cada dominio. Iniciaremos con un dominio, configurarlo, copiarlo para el segundo dominio, y después realiza los ajustes necesarios.  La configuración por defecto  requiere que cada archivo de configuración de Virtual Host termine en .conf.

Empezando por copiar el archivo para el primer dominio:
# cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/ejemplo.com.conf

Abre el nuevo archivo con tu editor como usuario root:
# nano /etc/apache2/sites-available/ejemplo.com.conf
Este archivo se verá algo como esto (he removido los comentarios aquí para hacer el archivo más legible):
<VirtualHost *:80>
 ServerAdmin webmaster@localhost
 DocumentRoot /var/www/html
 ErrorLog ${APACHE_LOG_DIR}/error.log
 CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Primero, necesitamos cambiar la directiva ServerAdmin por un correo del administrador del sitio que pueda recibir correos.
ServerAdmin admin@ejemplo.com

Después de esto, necesitamos agregar dos directivas.
  • La primera llamada ServerName, que establece la base del dominio que debe coincidir para este Virtual Host.  Esto será como tu dominio. 
  • La segunda, llamada ServerAlias, determina nombres futuros que pueden coincidir y servirse como el nombre base o dominio principal.  Esto es útil para host tipo www.
ServerName ejemplo.com
ServerAlias www.ejemplo.com

Lo que resta por cambiar para la configuración básica de un Virtual Host es la ubicación del directorio raíz para el dominio.  Ya hemos creado lo que necesitamos, así que solo necesitamos modificar DocumentRoot para apuntarlo al directorio que hemos creado.
DocumentRoot /home/linux/public_html/ejemplo.com/
 En total, nuestro archivo de Virtual Host debe verse así:
<VirtualHost *:80>
 ServerAdmin admin@ejemplo.com
 ServerName ejemplo.com
 ServerAlias www.ejemplo.com
 DocumentRoot /home/linux/public_html/ejemplo.com
 ErrorLog ${APACHE_LOG_DIR}/error.log
 CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Guarda y cierra el archivo.

Ahora que tenemos nuestro primer archivo Virtual Host configurado, podemos crear el segundo copiando el primero y realizando los cambios necesarios.
# cp /etc/apache2/sites-available/ejemplo.com.conf /etc/apache2/sites-available/pruebas.com.conf

 Abre el nuevo archivo con privilegios root en tu editor:
# nano /etc/apache2/sites-available/pruebas.com.conf
 Ahora tenemos que modificar todas las piezas de información para referirnos al segundo dominio. Cuando hayas terminado, deberá verse algo así:
<VirtualHost *:80>
 ServerAdmin admin@pruebas.com
 ServerName pruebas.com
 ServerAlias www.pruebas.com
 DocumentRoot /home/linux/public_html/pruebas.com
 ErrorLog ${APACHE_LOG_DIR}/error.log
 CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Guarda y cierra el archivo.

Habilitar los nuevos archivos Virtual Host

Ahora que hemos creado nuestros archivos virtual hosts, debemos habilitarlos.  Apache incluye herramientas que nos permiten hacer esto. Podemos usar la herramienta a2ensite para habilitar cada uno de nuestros sitios haciendo esto:
# a2ensite ejemplo.com.conf
# a2ensite pruebas.com.conf

Cuando hayas concluido, deberás reiniciar Apache para asegurarte de que tus cambios surtan efecto:
# service apache2 restart
* Restarting web server apache2
 AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1. Set the 'ServerName' directive globally to suppress this message
Este mensaje no afecta nuestro sitio.

Configurar Archivos Locales (opcional)

Si aún no estás utilizando nombres de dominio de tu propiedad para este procedimiento y utilizaste dominios ejemplo en su lugar, puedes al menos hacer pruebas de funcionalidad de este proceso modificando temporalmente el archivo hosts de tu computadora local (equipo cliente).

Esto interceptará cualquier petición a los dominios que configures y apunten a tu VPS (Servidor Privado Virtual), solo si estas utilizando dominios registrados. Esto solo funciona a través de tu computadora, y es simplemente útil para propósitos de prueba.

Asegúrate de estar trabajando en tu computadora local para los siguientes pasos y no en tu VPS. Deberás conocer la contraseña del administrador o ser miembro del grupo administrativo.

Si estas en una Mac o una máquina con Linux, edita tu archivo local con privilegios de administrador escribiendo, recuerda hacer esto en el equipo cliente, no en el servidor:
# nano /etc/hosts

Si estás en una máquina con Windows, puedes buscar las instrucciones para modificar tu archivo hosts en http://support.microsoft.com/kb/923947.

Los detalles que necesitas agregar son la IP pública de tu VPS seguido del dominio que deseas apuntar a ese VPS. Para los dominios que utilizamos en esta guía, asumiremos que la IP de nuestro VPS es 10.1.15.148, podemos agregar las siguientes líneas al final del archivo hosts:
10.1.15.148 ejemplo.com
10.1.15.148 pruebas.com
Guarda y cierra el archivo.

Esto apuntará directamente cualquier petición para ejemplo.com y pruebas.com en nuestra computadora y enviarlas a nuestro servidor en 10.1.15.148Esto es lo que queremos si no somos propietarios de esos dominios aún, solo con fines de prueba para nuestros Virtual Hosts.

Luego desde el mismo equipo cliente, escribe la dirección url de la pagina y verás un resultado como el siguiente.

Soporte para PHP

¿Qué es PHP y para que se puede utilizar?

PHP es un lenguaje de programación de código abierto muy usado en el ámbito web. A diferencia de otros lenguajes como Javascript, HTML, etc., que funcionan del lado del cliente, PHP funciona del lado del servidor, es decir al código insertado en la página que se encuentra en el servidor web, el usuario no tiene acceso, solo ve el resultado que genera dicho código en el navegador. O sea, las funciones que usamos en nuestras páginas, nadie podrá conocerlas ni copiarlas, a menos que nosotros se las ofrezcamos.

Con PHP se pueden hacer muchas cosas, pero su uso más practico es el de crear paginas dinámicas y script que realizan funciones a petición, es un lenguaje complejo y potente, pero podemos aprovechar sus funciones de forma elemental para agregarle funcionalidad a nuestras páginas. Solo es necesario el navegador, un servidor que de soporte para PHP y el propio PHP que podemos descargar gratis de internet. Uno de los lenguajes de programación que vamos a necesitar en el montaje de este servidor Web en Linux Debian es sin duda PHP.

Instalación

Lo instalamos con el siguiente comando:
sudo apt-get install php

sudo apt-get install php-cgi php-cli php-common libapache2-mod-php lighttpd libapache2-mod-perl2 php-curl php-dev php-gd php-imap php-ldap php-odbc
Habilitamos los siguiente módulos:
sudo a2enmod cgi cgid

Luego vamos a agregar la siguiente linea al archivo de configuración del Apache llamado apache2.conf para que nuestro Web server sea compatible con los siguientes tipos de extensiones.
sudo echo "DirectoryIndex index.html index.cgi index.py index.pl index.php index.xhtml index.shtml" >> /etc/apache2/apache2.conf

Probando PHP

Podrán verificar si lo ha hecho bien con el comando tail que nos muestra en pantalla el contenido de un archivo. Ahora vamos a comprobar que todo ha ido bien editando un archivo en el directorio raíz de nuestro servidor Web.

Anteriormente configuramos a conciencia donde iba a estar situada la raíz de el servidor Web, o sea el directorio que es visible desde otros exploradores, ~/public_html/ (o uno de los dominio) o ~/web/.

Creamos un archivo llamado por ejemplo compatible.php con el siguiente comando. 
$ echo '<?php phpinfo(); ?>' > ~/public_html/compatible.php

Habilitar PHP para configuración de multiples usuarios

Si por algún motivo no funciona PHP en tu directorio personalizado, es porque tu distribución trae el userdirs en PHP desactivado por defecto, una distribución que hace esto es Debian.  Para solucionarlo debemos abrir el archivo /etc/apache2/mods-enabled/php7.0.conf.
sudo nano /etc/apache2/mods-enabled/php7.0.conf

Buscar el siguiente mensaje (casi al final del archivo).
<IfModule mod_userdir.c>
      <Directory /home/*/public_html>
          php_admin_value engine Off
      </Directory>
    </IfModule>
y deshabilitar esas lineas, ya sea borrandolas o comentandolas (anteponer un # al comienzo de cada línea).

Reiniciamos apache con:
sudo /etc/init.d/apache2 restart
Ahora tan solo nos queda abrir ese archivo en el navegador introduciendo la dirección el IP o dominio (en el caso que haya decidido almacenar el archivo ahi) de tu servidor seguido del archivo compatible.php http://IPServer/~USUARIO/compatible.php.

Debería aparecer una ventana como la siguiente
Esto es todo, ya tenemos nuestro servidor web con PHP y Apache funcionando.
Comments