Este artículo es una introducción a los conceptos básicos de vhost y server block.
Verificar el estado del servidor web
Los servidores web más comunes que se ejecutan en Linux® son Apache®(httpd o apache2 ) y NGINX®. Plesk® es una plataforma GUI para administrar sitios web. Si tiene instalado Plesk, utilice este artículo como guía para entender los vhosts.
De forma predeterminada, los servidores web permiten el tráfico HTTP a través del puerto 80
y tráfico HTTPS (seguro) a través del puerto 443
.
Para encontrar el servidor web que se ejecuta en los puertos 80
y 443
, ingrese el siguiente comando:
# netstat -plnt | awk '$4 ~ /:(80|443)$/'
tcp6 0 0 :::80 :::* LISTEN 2549/httpd
tcp6 0 0 :::443 :::* LISTEN 2549/httpd
Para verificar el estado de un servidor web, ejecute uno de los comandos que se muestran en la siguiente tabla:
Tipo de servidor web | Comando |
---|---|
httpd | service httpd status |
o | |
systemctl status httpd | |
apache2 | service apache2 status |
o | |
systemctl status apache2 | |
nginx | service nginx status |
o | |
systemctl status nginx | |
Plask | service psa status |
o | |
systemctl status psa |
En Plesk, para comprobar el estado e identificar qué servidor web está en uso, introduzca el siguiente comando:
# service psa status; netstat -plnt | awk '$4 ~ /:(80|443)$/'
Verifique la configuración de los vhosts
Un servidor web (o un conjunto de servidores web) puede alojar varios sitios web mediante el uso de hosts virtuales (vhosts). Los host virtuales permiten que varios sitios web compartan recursos desde un servidor físico.
Los hosts virtuales pueden estar basados en IP o en nombres. Los vhosts basados en IP asignan una dirección IP diferente a un sitio web y basados en nombres vhosts asigna múltiples nombres de host a una sola dirección IP. Vhosts realiza un seguimiento de los sitios web en un servidor web, especificando la configuración de cada sitio web.
Para verificar la configuración de vhosts en Apache, ingrese uno de los siguientes comandos:
# httpd -S
o
# apache2ctl -S
*:80 example.com (/etc/httpd/vhost.d/example.com.conf:1)
Para leer el contenido de un archivo de configuración de vhost, ingrese el siguiente comando:
# cat /etc/httpd/vhost.d/example.com.conf
Las entradas en el archivo de configuración de vhosts incluyen:
- :80 o :443 :estas entradas especifican si el sitio web utiliza HTTP (
80
) o HTTPS (443
). - Raíz del documento :La ruta del directorio de los archivos del sitio web.
- Nombre del servidor :El nombre de dominio del sitio web.
- Alias del servidor :cualquier otro nombre de dominio de sitio web que desee redirigir a ServerName dominio. Usualmente usas dominios del tipo www.dominio , pero también puede utilizar otros dominios o subdominios.
- Registro de errores :la ruta del directorio y el nombre de los registros de errores.
- Puerto 443 :La configuración SSL. Comenta esta sección si el sitio web no tiene un certificado SSL válido.
- Archivos SSL :Las tres rutas de archivo SSL necesarias para un servidor HTTPS seguro.
El siguiente ejemplo muestra un archivo de configuración de vhosts:
<VirtualHost *:80>
DocumentRoot "/var/www/vhosts/example.com/httpdocs"
ServerName "example.com"
ServerAlias "www.example.com"
<Directory /var/www/vhosts/example.com/httpdocs>
AllowOverride All
Options +FollowSymlinks
</Directory>
DirectoryIndex index.html index.php index.htm
# Logging
CustomLog /var/log/httpd/example.com-access_log combined
ErrorLog /var/log/httpd/example.com-error_log
</VirtualHost>
#<VirtualHost *:443>
# DocumentRoot "/var/www/vhosts/example.com/httpdocs"
# ServerName "example.com"
# ServerAlias "www.example.com"
# <Directory /var/www/vhosts/example.com/httpdocs>
# AllowOverride All
# Options +FollowSymlinks
# </Directory>
# DirectoryIndex index.html index.php index.htm
# # SSL Configuration
# SSLEngine On
# SSLCertificateFile /etc/httpd/conf/ssl.crt/2021-example.com.crt
# SSLCACertificateFile /etc/httpd/conf/ssl.crt/2021-example.com.ca
# SSLCertificateKeyFile /etc/httpd/conf/ssl.key/2021-example.com.key
#
# # Logging
# CustomLog /var/log/httpd/example.com-ssl_access_log combined
# ErrorLog /var/log/httpd/example.com-ssl_error_log
#</VirtualHost>
Para copiar el archivo de configuración de un host virtual existente para crear uno nuevo, ingrese el siguiente comando:
# cat /OLD_DOMAIN.conf | sed 's/OLD_DOMAIN/NEW_DOMAIN/ig' >> /NEW_DOMAIN.conf
Edite el nuevo archivo de configuración de vhost según sea necesario. Por ejemplo, es posible que deba comentar la configuración que hace que el puerto 443
activo.
Para encontrar la ubicación de DocumentRoot en un archivo de configuración de vhost, ingrese el siguiente comando:
# grep Doc /etc/httpd/vhost.d/example.com.conf
DocumentRoot /var/www/vhosts/example.com
Crear un nuevo host virtual
Utilice las siguientes instrucciones para crear un nuevo host virtual:
-
Si es posible, copie un host virtual existente para mantener una configuración coherente. Use un editor de texto o una herramienta como
vim
,nano
,sed, or
awk`. -
Hacer un nuevo DocumentRoot directorio. El sistema realiza los logs de errores y personalizados automáticamente. Ejecute el siguiente comando:
# mkdir -p /docroot
-
Verifique que el servidor web no envíe ningún error:
# httpd -t
-
Realice un reinicio correcto en el servidor web para incorporar los cambios con una interrupción mínima en su entorno en vivo:
# service httpd graceful
-
Vuelva a comprobar el servidor web:
# httpd -t; service httpd status
Comprobar y solucionar los cambios en la configuración de vhost
Para verificar errores en Apache, use cualquiera de los siguientes comandos:
# httpd -t
o
# apache2ctl -t
AH00558: httpd: 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
Syntax OK
Para verificar errores en NGINX, use el siguiente comando:
# nginx -t
AH00558: httpd: 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
Syntax OK
Nota :La cláusula No se pudo determinar de forma fiable es común, y no significa un error. Por lo general, puedes ignorarlo.
El siguiente ejemplo muestra un ejemplo de error:
# httpd -t
AH00112: Warning: DocumentRoot [/var/www/vhosts/example.com] does not exist
AH00558: httpd: 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
Syntax OK
Solucione este error creando un DocumentRoot :
# mkdir -p /var/www/vhosts/example.com
Otro ejemplo de error:
# httpd -t
AH00526: Syntax error on line 5 of /etc/httpd/vhost.d/example.com.conf:
Invalid command 'oops', perhaps misspelled or defined by a module not
included in the server configuration
La palabra ups está en el archivo vhost y Apache no sabe cómo interpretarlo. Puede usar vim , nano , u otro editor de texto para corregir el error.
Reiniciar un servidor web
El servidor web reconoce los cambios realizados en la configuración de vhosts después de un reinicio. Los subprocesos actuales pueden finalizar antes de que ocurra el reinicio con graciado opción.
Para hacer un reinicio correcto en Apache, ingrese uno de los siguientes comandos:
# service httpd graceful
o
# service apache2 graceful
Las siguientes son las mejores prácticas para evitar interrupciones del servicio después de cambiar la configuración de vhosts:
- Hacer una copia de seguridad del servidor web.
- Realice los cambios.
- Haz un reinicio correcto.
- Asegúrese de que el servidor web se ejecuta sin errores.
Es importante evitar tanto tiempo de inactividad como sea posible en un entorno en vivo, lo que significa que después de reiniciar el servidor web, debe realizar las comprobaciones lo más rápido posible. Para hacer esto, agrupe todos los comandos en una línea.
Para hacer un reinicio correcto en Apache y buscar errores, ingrese cualquiera de los siguientes comandos:
# service httpd graceful; httpd -t; service httpd status | grep running
o
# service apache2 graceful; apache2ctl -t; service apache2 status | grep running
AH00558: httpd: 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
Syntax OK
Redirecting to /bin/systemctl status httpd.service
Active: active (running) (Result: exit-code) since Mon 2021-01-18 12:53:06 GMT; 2 months 19 days ago
Para reiniciar NGINX y verificar que se está ejecutando, ingrese los siguientes comandos:
# nginx -s reload; nginx -t; service nginx status
Use la pestaña Comentarios para hacer cualquier comentario o hacer preguntas. También puede iniciar una conversación con nosotros.