Apache HTTP Server (Español)

El Servidor HTTP Apache o solamente Apache, es un servidor web muy popular, desarrollado por la Apache Software Foundation.

Esta traducción de Apache HTTP Server fue revisada el 2020-12-02. Si existen cambios puede actualizarla o avisar al equipo de traducción.

Este articulo describe como configurar Apache y como integrarlo opcionalmente con PHP.

Instalación

Instale el paquete apache.

Configuración

Los archivos de configuración de Apache están ubicados en /etc/httpd/conf. El archivo de configuración principal es , el cual incluye varios otro archivos de configuración. El archivo de configuración por defecto debiera servir para una configuración simple. Por defecto, servirá el directorio a cualquiera que visite su pagina.

Para iniciar Apache, inicie el usando systemd.

Ahora, Apache debería estar ejecutándose. Pruebelo visitando http://localhost/ en un navegador web. Debería mostrar una pagina simple de indice.

Para una configuración opcional adicional, véase las siguientes secciones.

Opciones avanzadas

Véase la lista completa de directivas de configuración de Apache y la guía rápida de referencias de directivas.

Estas opciones en pueden serle de interés:

User http
Por razones de seguridad, tan pronto como es iniciado Apache por el usuario root (directamente o por scripts de inicio) cambia a esta UID (User ID, Identificación de usuario). El usuario por defecto es http, el cual es creado automáticamente durante la instalación.
Listen 80
Este el el puerto en donde Apache va a escuchar. Para acceso desde el internet con un router, tendrá que redirigirlo al puerto.
Si quiere configurar Apache para desarrollo local, puede querer que sea solo accesible desde su computador. Cambie esta linea a .
ServerAdmin you@example.com
Este el es correo del administrador que puede ser encontrado, p.ej. en paginas de error.
DocumentRoot "/srv/http"
Este es el directorio donde tiene que poner sus paginas web.
Cámbielo, si quiere, pero no olvide de cambiar también <Directory "/srv/http"> al valor de su DocumentRoot, o lo más probable que obtenga un Error 403 (falta de privilegios) cuando intente acceder a la nueva raíz del documento. No olvide cambiar la linea a , si no, obtendrá un Error 403. Recuerde que el directorio DocumentRoot y sus carpetas padres deben permitir permisos de ejecución por otros (se puede establecer con ), sino, obtendrá un Error 403.
AllowOverride None
Esta directiva en las secciones provoca que Apache ignore completamente los archivos . Tome en cuenta que este es ahora el valor por defecto en Apache 2.4, así que tendrá que permitir explícitamente anulaciones si planea usar los archivos . Si tiene la intención de usar u otras configuraciones en los archivos , puede permitir que directivas declaradas en ese archivo pueden anular la configuración del servidor. Para más información, refiérase a la documentación de Apache.

Puede encontrar más opciones de configuración en :

Para desactivar la firma del servidor:

ServerSignature Off

Para ocultar información como las versiones de Apache y PHP:

ServerTokens Prod

Directorios de usuario

Los directorios de usuario están disponibles por defecto a través de http://localhost/~tunombredeusuario/ y muestran los contenidos de ~/public_html (esto puede ser cambiado en /etc/httpd/conf/extra/httpd-userdir.conf).

Si no quiere que los directorios de usuario estén disponibles en la web, comente la siguiente linea en :

Include conf/extra/httpd-userdir.conf

Debe asegurarse que los permisos en su directorio home estén correctamente establecidos para que Apache pueda accederlo. Su directorio home y ~/public_html deben ser ejecutables para otros («el resto del mundo»):

$ chmod o+x ~
$ chmod o+x ~/public_html
$ chmod -R o+r ~/public_html

Reinicie para aplicar los cambios. Véase también Umask#Set the mask value.

TSL

Primero obtenga un certificado. Si posee un dominio publico, puede usar Let's Encrypt.

En , saque las marcas de comentario en las siguientes tres lineas:

LoadModule ssl_module modules/mod_ssl.so
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
Include conf/extra/httpd-ssl.conf

Si esta usando , la siguiente linea tampoco debe comentarse:

LoadModule rewrite_module modules/mod_rewrite.so

Después de obtener una llave y un certificado, asegúrese que las lineas y en apunten a la llave y el certificado. Si también es generada una cadena concatenada de certificados CA, añada el nombre del archivo a .

Finalmente, reinicie para aplicar los cambios.

Hosts virtuales

Si quiere tener más de un host, saque las marcas de comentario en la siguiente linea en :

Include conf/extra/httpd-vhosts.conf

Establezca sus hosts virtuales en . El archivo por defecto contiene un elaborado ejemplo que debería ayudarle al iniciar.

Para probar los hosts virtuales en su maquina local, añada los nombres virtuales a su archivo /etc/hosts:

127.0.0.1 domainname1.dom
127.0.0.1 domainname2.dom

Reinicie para aplicar los cambios.

Administrar varios hosts virtuales

Si tiene una gran cantidad de hosts virtuales, puede querer activarlos y desactivarlos fácilmente. Es recomendado crear un archivo de configuración por host virtual y guardarlos en una sola carpeta, ej. .

Primero cree la carpeta:

# mkdir /etc/httpd/conf/vhosts

Y guarde cada archivo de configuración en ella:

# nano /etc/httpd/conf/vhosts/domainname1.dom
# nano /etc/httpd/conf/vhosts/domainname2.dom
...

En el ultimo paso, Include (Incluya) los archivos de configuración en su :

#Vhosts permitidos:
Include conf/vhosts/domainname1.dom
Include conf/vhosts/domainname2.dom

Puede activar o desactivar cada host virtual comentándolo o no comentándolo.

Un archivo vhost básico se parecerá a esto:

Extensiones

PHP

Primero instale PHP, después, siga alguna de las tres subsecciones siguientes. Finalmente, pruebe la instalación como se describe en la subsección final.

Usando libphp

Este método es probablemente el más fácil, pero el menos escalable: es apropiado para una carga de solicitudes ligera. También requiere que cambie el modulo mpm, lo cual puede causar problemas con otras extensiones (ej. no es compatible con #HTTP2).

Instale .

En comente la linea:

#LoadModule mpm_event_module modules/mod_mpm_event.so

y no comente la linea:

LoadModule mpm_prefork_module modules/mod_mpm_prefork.so

Para habilitar PHP, añada estas lineas a :

  • Ponga esto al final de la lista :
LoadModule php_module modules/libphp.so
AddHandler php-script .php
  • Ponga esto al final de la lista Include:
Include conf/extra/php_module.conf

Reinicie usando systemd.

Utilizando apache2-mpm-worker y mod_fcgid

Este método provee un uso de memoria y rendimiento mejorado al servir múltiples peticiones.

Instale y .

Cree el directorio necesario y enlacelo (symlink) a el wrapper de PHP:

# mkdir /srv/http/fcgid-bin
# ln -s /usr/bin/php-cgi /srv/http/fcgid-bin/php-fcgid-wrapper

Cree con el siguiente contenido:

/etc/httpd/conf/extra/php-fcgid.conf
# Modulos requeridos: fcgid_module

<IfModule fcgid_module>
    AddHandler php-fcgid .php
    AddType application/x-httpd-php .php
    Action php-fcgid /fcgid-bin/php-fcgid-wrapper
    ScriptAlias /fcgid-bin/ /srv/http/fcgid-bin/
    SocketPath /var/run/httpd/fcgidsock
    SharememPath /var/run/httpd/fcgid_shm
        # Si no permite peticiones más grandes, varias aplicaciones pueden fallar (como el WordPress login)
        FcgidMaxRequestLen 536870912
        # Ruta a php.ini – por defecto en /etc/phpX/cgi
        DefaultInitEnv PHPRC=/etc/php/
        # Numero de hijos de PHP a ejecutar. No lo defina para dejar que PHP decida.
        #DefaultInitEnv PHP_FCGI_CHILDREN 3
        # Peticiones máximas antes que un proceso sea detenido y uno nuevo sea iniciado
        #DefaultInitEnv PHP_FCGI_MAX_REQUESTS 5000
    <Location /fcgid-bin/>
        SetHandler fcgid-script
        Options +ExecCGI
    </Location>
</IfModule>

Edite :

  • Quite las marcas de comentario en la carga del modulo actions:
  • Cargue el modulo FCGID después de haber cargado el modulo unixd (de el cual es dependiente) — ubiquelo en el bloque <IfModule unixd_module> —:
  • Asegúrese que el Include de la configuración de MPM no este comentado (no esta comentado por defecto en la versión instalada de este archivo):
  • Incluya su nueva configuración de FCGID:

Reinicie .

Utilizando php-fpm y mod_proxy_fcgi

Este método provee «una implementación alternativa al PHP FastCGI con algunas características adicionales (la mayoría) útiles para sitios web con mucho tráfico.» .

Instale .

Habilite los módulos de proxy:

Cree /etc/httpd/conf/extra/php-fpm.conf con el siguiente contenido:

E incluyalo al final de :

Include conf/extra/php-fpm.conf

Puede configurar PHP-FPM en /etc/php/php-fpm.d/www.conf, pero la configuración por defecto debería funcionar bien.

Inicie y habilite . Reinicie .

Pruebe si PHP funciona

Para probar si PHP fue correctamente configurado, cree un archivo llamado en su directorio DocumentRoot de Apache (ej. o ) con los siguientes contenidos:

<?php phpinfo(); ?>

Y vaya a http://localhost/prueba.php o http://localhost/~<username>/prueba.php.

HTTP2

Para habilitar el soporte a HTTP/2, saque las marcas de comentario de la siguiente linea en httpd.conf:

LoadModule http2_module modules/mod_http2.so

Y añada la siguiente linea:

Protocols h2 http/1.1

Para más información, véase la documentación de mod_http2.

Tome en cuenta que http2_module no es compatible con mpm_prefork_module que es ampliamente usado en la configuración de PHP. Considere usar php-fpm.

Solución de problemas

Estado de Apache y registros

Vea el estado del demonio de Apache con systemctl.

Los registros de Apache pueden ser encontrados en .

Error:PID file /run/httpd/httpd.pid not readable (yet?) after start

Comente la linea en httpd.conf:

/run/httpd no es creado al arrancar

Si al ejecutar como root arroja «unsafe path transition», compruebe la posesión de su directorio raíz.

ls -la /
chown root:root /

Apache is running a threaded MPM, but your PHP Module is not compiled to be threadsafe.

Si al cargar el falla, y obtiene un error como este en el journal:

Apache is running a threaded MPM, but your PHP Module is not compiled to be threadsafe.  You need to recompile PHP.

Es porque PHP incluye soporte para un modulo que no es threadsafe, y usted esta intentando usar un MPM hilado. Una solución para esto es usar un MPM no hilado. Intente remplazar mpm_event_module con :

Y reinicie .

AH00534: httpd: Configuration error: No MPM loaded.

Puede encontrar este error después de una actualización reciente. Esto es solo el resultado de un cambio reciente en httpd.conf que no ha reproducido en su configuración local. Para arreglarlo, no comente la siguiente linea:

Y reinicie .

AH00072: make_sock: could not bind to address

Esto puede ser causado por varias cosas. El problema más común es que algo ya esta escuchando en el puerto dado, compruebe que no este sucediendo con netstat:

# netstat -lnp | grep -e :80 -e :443

Si obtiene alguna salida, detenga el servicio que esta ocupando el puerto o mate el proceso desbocado (runaway) que esta causando que el puerto este ocupado, e intente de nuevo.

Otro problema puede ser que Apache no esta iniciando como root por alguna razón — intente iniciarlo manualmente y vea si aun obtiene el error AH0072 —.

# httpd -k start

Finalmente, también puede tener un error con su configuración y esté escuchando dos veces en el puerto dado. Lo siguiente es un ejemplo de una mala configuración que puede desencadenar este problema:

Listen 0.0.0.0:80
Listen [::]:80

AH01071: Got error 'Primary script unknown

Este error puede ser causado por en el archivo de unidad de systemd de php-fpm si esta sirviendo archivos en /home como es un entorno de host virtual. Puede desactivar esta característica con editando el archivo de unidad de php-fpm y reiniciandolo. Alternativamente, mueva su raíz de documento.

Cambiar el valor de max_execution_time en php.ini no tiene efecto

Si cambió el valor de en a un valor mayor de 30 (segundos), aun puede que obtenga una respuesta de de Apache después de treinta segundos. Para arreglarlo, añada una directiva a su configuración http justo después del bloque <FilesMatch \.php__SUB_LEVEL_SECTION_22__gt;:

Y reinicie .

PHP-FPM: los errores de cada host virtual no son registrados por separado

Si tiene múltiples hosts virtuales, puede ser deseable que cada uno registre sus errores en archivos separados (usando la directiva de Apache ErrorLog). Si esto no le esta funcionando, confirmen que PHP-FPM esta configurado para que registre los errores a syslog:

También es posible que la configuración de reserva la haya anulado. Asegúrese que la siguiente linea este comentada:

Véase también

gollark: Oh, that's secure enough then, although you'll have to host out of game stuff.
gollark: How will it work, then?
gollark: Oh, and what stops me from spoofing your DNS server and redirecting everyone to potat.os?
gollark: What, manually?
gollark: So what stops me from registering 100000 domains?
This article is issued from Archlinux. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.