GNU/Linux >> Tutoriales Linux >  >> Cent OS

Cómo instalar y configurar el servidor web Caddy con PHP en Fedora 34 / CentOS 8

Caddy es un servidor web de código abierto escrito en el lenguaje Go. Proporciona compatibilidad con HTTP/3, TLS v1.3, configuración automática de SSL con Let's Encrypt, proxy inverso y admite varios complementos para ampliar su funcionalidad. Tiene la ventaja de que toda su configuración se sirve desde un solo archivo sin importar cuántos sitios necesite alojar.

Este tutorial cubrirá la instalación y configuración de Caddy y PHP en servidores basados ​​en Fedora 34 y CentOS 8. Cubriremos cómo alojar sitios únicos y múltiples y cómo usar el proxy inverso junto con algunas otras funciones de seguridad.

Requisitos

  • Servidor basado en Fedora 34 o CentOS 8

  • Un usuario no root con privilegios sudo

  • Un nombre de dominio que apunte a la dirección IP del servidor

  • SELinux está deshabilitado.

    $ sudo setenforce 0
    
  • Asegúrate de que todo esté actualizado.

    $ sudo dnf update
    

Paso 1:Configuración del cortafuegos

El primer paso es configurar el Firewall para abrir puertos HTTP y HTTPS. Fedora y CentOS vienen con el firewall Firewalld preinstalado.

Compruebe si el cortafuegos se está ejecutando.

$ sudo firewall-cmd --state

Deberías obtener el siguiente resultado.

running

Verifique los servicios/puertos permitidos actualmente.

$ sudo firewall-cmd --permanent --list-services

Debería mostrar el siguiente resultado.

dhcpv6-client mdns ssh

Permitir puertos HTTP y HTTPS.

$ sudo firewall-cmd --permanent --add-service=http
$ sudo firewall-cmd --permanent --add-service=https

Vuelva a comprobar el estado del cortafuegos.

$ sudo firewall-cmd --permanent --list-services

Debería ver un resultado similar.

dhcpv6-client http https mdns ssh

Vuelva a cargar el cortafuegos.

$ sudo systemctl reload firewalld

Paso 2:Instalar Caddy

El primer paso es instalar el servidor. Los pasos de instalación siguen siendo los mismos para Fedora 34 y CentOS 8.

$ sudo dnf install 'dnf-command(copr)'
$ sudo dnf copr enable @caddy/caddy
$ sudo dnf install caddy

Puede verificar la instalación con el siguiente comando.

$ caddy version
v2.4.3 h1:Y1FaV2N4WO3rBqxSYA8UZsZTQdN+PwcoOcAiZTM8C0I=

Paso 3:Conceptos básicos de configuración del Caddy

Caddy usa JSON como formato principal para almacenar o escribir configuraciones. Es la forma más flexible de escribir la configuración y es compatible con todas las funciones de Caddy. Pero si no sabe cómo escribir archivos JSON, Caddy ofrece una forma más sencilla en forma de Caddyfile.

El paquete Fedora / CentOS incluye un archivo Caddy en /etc/caddy/Caddyfile . Debería tener el siguiente aspecto (ignorando los comentarios)

:80 {
        root * /usr/share/caddy
        file_server
}

Habilite e inicie el demonio caddy.

$ sudo systemctl enable --now caddy

Puede abrir la URL http://youripaddress verificar. Debería ver la siguiente página de bienvenida.

Caddy ofrece muchas funciones y configuraciones, por lo que solo elegiremos las importantes para servir nuestro sitio web. La configuración predeterminada sirve a través de HTTP, que se especifica como :80 . La root directiva le dice a Caddy que busque los archivos que se van a servir en el /usr/share/caddy directorio.

El file_server La directiva le dice a Caddy que actúe como un servidor de archivos, lo que significa que solo servirá archivos estáticos en la dirección predeterminada.

Configurar Caddy para un sitio web HTML básico

Vamos a crear un archivo de configuración de caddy básico para servir un sitio web estático.

Cree un directorio para alojar su sitio web y almacenar sus archivos de registro.

$ sudo mkdir -p /var/www/example.com/html
$ sudo mkdir /var/log/caddy

Establezca la propiedad del directorio en Caddy.

$ sudo chown caddy:caddy /var/www/example.com/html -R
$ sudo chown caddy:caddy /var/log/caddy

Cree un archivo HTML para probarlo y ábralo para editarlo.

$ sudo nano /var/www/example.com/html/index.html

Agrega el siguiente código.

<!DOCTYPE html>
<html>
<head>
<title>Hello from Caddy!</title>
</head>
<body>
<h1>Hello, from Caddy!</h1>
</body>
</html>

Presiona Ctrl + X para cerrar el editor y presiona Y cuando se le solicite guardar el archivo.

Abra el archivo Caddy para editarlo.

$ sudo nano /etc/caddy/Caddyfile

Reemplace el código existente con el siguiente.

example.com {
    root * /var/www/example.com/html
    file_server
    encode gzip

    log {
        output file /var/log/caddy/example.access.log
    }

    @static {
        file
        path *.ico *.css *.js *.gif *.jpg *.jpeg *.png *.svg *.woff *.pdf *.webp
    }
    header @static Cache-Control max-age=5184000

    tls [email protected]
}

Presiona Ctrl + X para cerrar el editor y presiona Y cuando se le solicite guardar el archivo.

Repasemos todas las directivas del archivo. El encode gzip directiva le dice a Caddy que comprima los archivos usando compresión Gzip.

El log La directiva genera el registro de acceso para el sitio en /var/log/caddy/example.access.log expediente. De forma predeterminada, Caddy rota los archivos de registro cuando alcanzan los 100 MB. Los archivos rotados se eliminan después de 90 días o cuando hay más de 10 registros rotados. Puede cambiar los parámetros predeterminados de la siguiente manera.

log {
    output file /var/log/caddy/example.access.log {
        roll_size 10MB
        roll_keep 5
        roll_keep_for 240h
    }
}

En el código anterior, los archivos de registro rotados tienen un límite de 10 MB y se eliminan después de 10 días (240 horas) o cuando hay más de 5 registros rotados.

Caddy generará e instalará el certificado SSL automáticamente sin ninguna intervención. El tls La directiva nos permite proporcionar opciones adicionales para configurar HTTPS, como la dirección de correo electrónico utilizada para obtener los informes de Let's Encrypt.

El header La directiva habilita el control de caché en todos los archivos estáticos (imágenes/javascript/archivos CSS). Puede agregar más extensiones de archivo o copiar el código para establecer una duración diferente para diferentes formatos de archivo. Tendrás que cambiar el valor static a algo diferente porque esa es una referencia con nombre.

Una vez terminado, puede validar su configuración usando el siguiente comando.

$ caddy validate --adapter caddyfile --config /etc/caddy/Caddyfile

Tenemos que usar el --adapter caddyfile porque, por defecto, el comando solo valida configuraciones JSON.

Si recibe la siguiente advertencia, puede solucionarlo fácilmente con un solo comando.

WARN    input is not formatted with 'caddy fmt' {"adapter": "caddyfile", "file": "/etc/caddy/Caddyfile", "line": 2}

Ejecute el siguiente comando para corregir el error.

$ caddy fmt --overwrite /etc/caddy/Caddyfile

El comando anterior formatea y sobrescribe el archivo Caddy.

Reinicie Caddy para habilitar la configuración. Deberá reiniciar el servidor cada vez que realice un cambio en la configuración.

$ sudo systemctl restart caddy

Ábralo en su navegador y debería ver la siguiente página, lo que significa que la configuración está funcionando.

Configuración de varios sitios en Caddy

Puede configurar varios sitios en un solo archivo caddy. Para hacer eso, cree bloques separados para cada sitio de la siguiente manera.

example1.com {
	root * /var/www/example1.com/html
	...
}

example2.com {
	root * /var/www/example2.com/html
	...
}

Este método está bien para un par de sitios, pero uno solo puede volverse bastante grande y difícil de mantener si aloja varios sitios.

Cree el directorio `/etc/caddy/caddyconf.

$ sudo mkdir /etc/caddy/caddyconf

Ahora puede importar los archivos de configuración desde el directorio en su /etc/caddty/caddyfile en la parte superior del archivo.

import caddyconf/*.conf

El paso final es crear archivos de configuración individuales para cada sitio.

Configuración de sitios PHP

Hasta ahora, solo hemos hablado sobre servir sitios estáticos usando Caddy. También puede usar Caddy con la misma facilidad para servir sitios PHP dinámicos. Para habilitar la compatibilidad con PHP, agregue el siguiente código dentro del bloque de su sitio.

example1.com {
	root * /var/www/example1.com/html
	...
	php_fastcgi unix//run/php-fpm/www.sock
}

También deberá instalar PHP.

$ sudo dnf install php-fpm php-cli php-gd

Puede instalar cualquier módulo PHP adicional que necesite. También deberá configurar el archivo /etc/php-fpm.d/www.conf . Abra el archivo para editarlo.

$ sudo nano /etc/php-fpm.d/www.conf

Necesitamos configurar el usuario/grupo de procesos PHP de Unix en caddy . Encuentra el user=apache y group=apache líneas en el archivo y cámbielas a nginx.

...
; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
;       will be used.
; RPM: apache user chosen to provide access to the same directories as httpd
user = caddy
; RPM: Keep a group allowed to write in log dir.
group = caddy
...

Busque la línea listen.acl_users = apache,nginx y cambia su valor a lo siguiente.

...
listen.acl_users = apache,nginx,caddy
...

Guarde el archivo presionando Ctrl + X e ingresando Y cuando se le solicite.

Inicie el proceso PHP-fpm.

$ sudo systemctl start php-fpm

Para probar su configuración de PHP, cree un archivo test.php en el html carpeta.

$ sudo nano /var/www/example.com/html/test.php

Agregue el siguiente contenido y guarde el archivo presionando Ctrl + X e ingresando Y cuando se le solicite.

<?php phpinfo();

Inicie http://example.com/test.php en su navegador web, y debería ver lo siguiente.

Configuración de proxy inverso

Caddy también se puede utilizar como servidor proxy inverso. Para configurarlo, use el siguiente código.

example1.com {
	...
	reverse_proxy localhost:8000 {
		header_up Host {http.reverse_proxy.header.X-Forwarded-Host}
	}
}

Paso 4 - Opciones globales de Caddy

Caddyfile le permite configurar algunas opciones que se aplicarán globalmente, es decir, se aplicarán a todos sus sitios. Es beneficioso definir opciones globales para que no tenga que volver a declararlas en cada bloque de servidor.

Debe incluir las opciones globales en la parte superior de su Caddyfile. Hay muchas opciones que puede configurar globalmente. Pasaremos por algunos importantes solamente. Para el resto, debe consultar la documentación de Caddy.

Aquí hay algunas opciones predeterminadas que puede usar en su Caddyfile.

{	
	#TLS Options
	email [email protected]

	servers	:443 {
		protocol {
			experimental_http3
		}
		max_header_size 5mb
	}
	
	servers :80 {
		protocol {
			allow_h2c
		}
		max_header_size 5mb
	}
}

En el código anterior email especifica el ID de correo electrónico utilizado para registrar el certificado SSL con la autoridad de Let's Encrypt. El grapado OCSP mejora el rendimiento de los sitios HTTPS al proporcionar información de revocación de certificados a los navegadores automáticamente. El max_header_size La opción especifica el tamaño de los encabezados de solicitud HTTP del cliente que se analizarán.

También hemos habilitado el protocolo HTTP/3 para sitios HTTPS y compatibilidad con HTTP/2 para sitios HTTP. Estas son funciones experimentales y probablemente se eliminen eventualmente, así que tenga cuidado antes de habilitarlas.

Paso 5:Mejora de la seguridad

Habilitación de la autenticación HTTP

Puede habilitar la autenticación HTTP simple para ciertos directorios. Primero, debe crear credenciales de autenticación para ello.

Caddy solo acepta contraseñas hash en la configuración. Por lo tanto, primero debe crear una contraseña cifrada. Ejecute el siguiente comando para hacerlo.

$ caddy hash-password
Enter password:
Confirm password:
JDJhJDEwJEVCNmdaNEg2Ti5iejRMYkF3MFZhZ3VtV3E1SzBWZEZ5Q3VWc0tzOEJwZE9TaFlZdEVkZDhX

Una vez que tenga la contraseña lista, ingrese el siguiente código en su Caddyfile.

basicauth /secret/* {
	John JDJhJDEwJEVCNmdaNEg2Ti5iejRMYkF3MFZhZ3VtV3E1SzBWZEZ5Q3VWc0tzOEJwZE9TaFlZdEVkZDhX
}

El comando anterior protegerá el /secret directorio con las credenciales que acaba de crear.

Reforzar la seguridad del sitio y habilitar HSTS

Hay otras configuraciones de seguridad que puede agregar para proteger sus sitios. Para eso, crearemos otro archivo /etc/caddy/caddy_security.conf .

$ sudo nano /etc/caddy/caddy_security.conf

Agregue el siguiente código.

header {
    Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
    X-Xss-Protection "1; mode=block"
    X-Content-Type-Options "nosniff"
    X-Frame-Options "DENY"
    Permissions-Policy "interest-cohort=()"
    Content-Security-Policy "upgrade-insecure-requests"
    Referrer-Policy "strict-origin-when-cross-origin"
    Cache-Control "public, max-age=15, must-revalidate"
    Feature-Policy "accelerometer 'none'; ambient-light-sensor 'none'; autoplay 'self'; camera 'none'; encrypted-media 'none'; fullscreen 'self'; geolocation 'none'; gyroscope 'none'; magnetometer 'none'; microphone 'none'; midi 'none'; payment 'none'; picture-in-picture *; speaker 'none'; sync-xhr 'none'; usb 'none'; vr 'none'"
}

El código anterior habilita/implementa lo siguiente.

  1. Habilita la compatibilidad con HSTS para el sitio y todos sus subdominios.
  2. Habilita el filtrado XSS.
  3. Evita la detección de contenido/MIME.
  4. Evita que tu sitio se cargue dentro de un IFRAME.
  5. Evita que su sitio se incluya en las pruebas de seguimiento de FLOC.
  6. Agrega una política de seguridad de contenido sobre cómo los agentes de usuario tratan las URL no seguras.
  7. Implementa una política de referencia para que solo se envíe la referencia para solicitudes de origen cruzado si el protocolo dice lo mismo.
  8. La política de funciones proporciona un mecanismo para habilitar y deshabilitar ciertas funciones del navegador.

A continuación, importe el archivo en cualquiera de los bloques del sitio que desee.

example.com {
	...
	import /etc/caddy/caddy_security.conf
}

Reinicie el servidor para implementar el cambio.

Conclusión

Esto concluye el tutorial sobre la instalación y configuración del servidor web Caddy en servidores basados ​​en Fedora 34 / CentOS 8. Si tiene alguna pregunta, publíquela en los comentarios a continuación.


Cent OS
  1. Cómo instalar el servidor web Apache en CentOS 7

  2. Cómo instalar y configurar VNC en CentOS 7

  3. Cómo instalar y configurar Nextcloud con Apache en CentOS 7

  4. Cómo instalar y configurar Nagios en CentOS 7

  5. Cómo instalar y configurar un servidor NFS en CentOS 8

Cómo instalar y configurar Nextcloud en Fedora 32

Cómo instalar y configurar el servidor VNC en CentOS 7

Cómo instalar y configurar Memcached en CentOS 8

Cómo instalar el servidor web Caddy en CentOS 7

Cómo instalar y configurar el servidor web Caddy con PHP en Rocky Linux 8

Cómo instalar el servidor web Caddy en CentOS 8