Autor: Joel Barrios Dueñas
Correo electrónico: darkshram en gmail punto com
Sitio de Red: https://www.alcancelibre.org
Licencia Creative Commons
© 1999-2026 Joel Barrios Dueñas. Este manual se distribuye bajo la licencia Creative Commons Reconocimiento-NoComercial-CompartirIgual 4.0 Internacional (CC BY-NC-SA 4.0). Usted es libre de compartir y adaptar el material bajo los siguientes términos: debe dar crédito al autor, no puede utilizarlo para fines comerciales y debe compartir las obras derivadas bajo la misma licencia. La licencia completa está disponible en https://creativecommons.org/licenses/by-nc-sa/4.0/legalcode.es.
El enlace remoto o hotlinking es una práctica mediante la cual un sitio web muestra imágenes u otros recursos multimedia alojados en un servidor de terceros, enlazándolos directamente desde su código HTML. Aunque técnicamente simple, esta acción consume ancho de banda y recursos del servidor original sin su consentimiento, generando costos operativos adicionales y tráfico inútil. Es considerado una práctica cuestionable y poco ética en la administración de sitios web.
Este documento proporciona métodos para configurar Nginx y proteger directorios de imágenes, permitiendo su acceso únicamente cuando el referente —la página que solicita el recurso— sea el propio servidor o dominios autorizados explícitamente. De este modo, se preservan los recursos del servidor y se respetan los derechos del propietario del contenido.
Una anécdota histórica: Hace años, cuando Alcance Libre utilizaba Geeklog, decenas de manuales fueron copiados íntegramente en plataformas como Taringa, que además realizaban hotlinking de las imágenes. Este drenaje masivo de ancho de banda llevó a implementar una contramedida creativa: en lugar de mostrar un error 403 genérico, se servía una imagen… muy explícita de una muy famosa actriz de contenido para adultos. Esta medida, aunque cuestionable, resultó efectiva para motivar a los administradores de esos sitios a cumplir con la licencia, hospedar las imágenes localmente o eliminar las publicaciones. Sirve como recordatorio humorístico —aunque contundente— de la importancia de proteger los recursos del servidor.
Este manual asume que se han estudiado y comprendido los procedimientos descritos en el manual «Configuración de Nginx». A continuación, se presenta el método para implementar la protección mediante la directiva valid_referers de Nginx.
Genere una imagen pequeña pero contundente que se mostrará cuando se deniegue el acceso. Puede utilizar ImageMagick para crearla y copiarla en el directorio raíz del anfitrión virtual.
convert -size 420x110 xc:white -gravity Center -pointsize 24 -fill \
red -draw "text 0,0 'Error 403: Prohibido hacer hotlink'" \
/usr/share/nginx/html/hotlink-403.png
Nginx utiliza la directiva valid_referers para definir una lista de referentes permitidos. Cuando una solicitud provenga de un anfitrión distinto de estos referentes, se puede denegar el acceso y mostrar una imagen de error personalizada.
Primero, cree el directorio que almacenará las imágenes protegidas y copie algunos archivos de ejemplo:
mkdir /var/www/imagenes
cp /usr/share/pixmaps/*.png /var/www/imagenes
Luego, cree el archivo de configuración /etc/nginx/default.d/imagenes.conf:
vi /etc/nginx/default.d/imagenes.conf
Añada el siguiente contenido, que define una lista de referentes permitidos y configura la respuesta para solicitudes sin autorización:
location ~* /imagenes/\.(jpg|jpeg|png|gif|webp)$ {
# Directorio donde se encuentran las imágenes protegidas
root /var/www;
# Lista de referentes válidos:
# - 'none': permite solicitudes sin encabezado Referer (acceso directo)
# - 'blocked': permite solicitudes con Referer bloqueado o vacío
# - 'server_names': permite el propio nombre del servidor (definido en server_name)
# - Dominios específicos permitidos (usar ~. para coincidencia con expresiones regulares)
valid_referers none blocked server_names
~\.localhost
~\.127\.0\.0\.1
~\.192\.168\.70\.50
~\.m50\.alcancelibre\.org\.mx
~\.midominio\.org
~\.sitio-amigo\.org;
# Si el referente no es válido, denegar el acceso
if ($invalid_referer) {
return 403;
}
}
# Configurar una página de error personalizada para el código 403
error_page 403 /hotlink-403.png;
location = /hotlink-403.png {
root /usr/share/nginx/html;
internal;
}
Explicación de la configuración:
location ~* /imagenes/\.(jpg|jpeg|png|gif|webp)$: Esta directiva aplica las reglas a todas las solicitudes de archivos con las extensiones de imagen especificadas, sin importar mayúsculas o minúsculas (~*).valid_referers: Define una lista blanca de referentes permitidos. Los valores y patrones incluyen:
none: Permite solicitudes que no envían el encabezado Referer (acceso directo a la URL de la imagen).blocked: Permite solicitudes donde el Referer está presente pero ha sido bloqueado o vaciado por el cliente.server_names: Permite solicitudes donde el Referer coincide con el nombre del servidor definido en la directiva server_name del bloque server.~.): Permiten coincidir con dominios específicos. En el ejemplo se incluyen localhost, direcciones IP internas, el propio dominio (midominio.org) y un dominio amigo (sitio-amigo.org).if ($invalid_referer) { return 403; }: Si el referente de la solicitud no está en la lista valid_referers, la variable $invalid_referer se establece en 1 y Nginx responde con un código de estado HTTP 403 (Prohibido).error_page 403 /hotlink-403.png;: Especifica que para cualquier error 403, se sirva la imagen personalizada hotlink-403.png.location = /hotlink-403.png { ... internal; }: Define una ubicación interna para servir la imagen de error, asegurando que sea inaccesible directamente desde fuera como una ruta normal.Guarde los cambios, salga del editor y pruebe la sintaxis de la configuración de Nginx:
nginx -t
Si la prueba es exitosa, recargue la configuración de Nginx:
systemctl reload nginx
O bien, en sistemas con SysVinit como ALDOS:
service nginx reload
valid_referers en el ejemplo deben adaptarse a los dominios y direcciones IP reales de su servidor y sus aliados. Asegúrese de escapar correctamente los puntos en las expresiones regulares (ej: \. para coincidir con un punto literal).none).server_names o el patrón del dominio).Referer.Referer. La lista valid_referers debe ser cuidadosamente definida.if en Nginx debe ser juicioso, ya que puede impactar el rendimiento en configuraciones muy complejas. Para este caso de uso específico, es una solución estándar y eficiente.Esta configuración proporciona un control granular sobre quién puede utilizar las imágenes de su servidor, defendiendo eficazmente su ancho de banda y promoviendo un uso ético del contenido web con el potente y eficiente servidor Nginx.