Seguimiento de Primera Parte con nginx/Apache
Configura un proxy de primera parte en tu servidor auto-hospedado usando la configuración del proxy inverso nginx o Apache.
Dificultad: Media - Requiere acceso a archivos de configuración del servidor y conocimientos básicos de terminal.
Por Qué Esto Funciona (Mismo Origen)
Este enfoque utiliza /api/_z/script.js que está en el mismo origen que tu sitio web. Firefox ETP y otras protecciones de seguimiento solo bloquean solicitudes de origen cruzado.
- El navegador ve:
tudominio.com/api/_z/script.js→ Mismo origen ✅ - nginx/Apache proxifica la solicitud al servidor Zenovay (el navegador nunca lo ve)
- Todas las protecciones de seguimiento se evitan porque la solicitud es de primera parte
Antes de Comenzar
Asegúrate de tener:
- Acceso root/sudo a tu servidor
- nginx o Apache instalados
- Tu código de seguimiento de Zenovay (encontrado en Dominios, selecciona tu sitio, luego la pestaña General)
- Acceso SSH a tu servidor
Formato de Tu Código de Seguimiento
Tu código de seguimiento se ve así: ZV_XXXXXXXXXX
- Comienza con
ZV_ - Seguido de 10 caracteres (letras y números)
- SENSIBLE A MAYÚSCULAS - cópialo exactamente
Ejemplo: ZV_Q8U0GYD70WR
Configuración de nginx
Paso 1: Agregar la Ubicación del Proxy
Agrega el siguiente bloque de ubicación a tu configuración del servidor nginx:
server {
listen 80;
listen 443 ssl;
server_name tudominio.com www.tudominio.com;
# Tu configuración SSL existente...
ssl_certificate /etc/letsencrypt/live/tudominio.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/tudominio.com/privkey.pem;
# Tu configuración root existente...
root /var/www/tudominio;
index index.html;
# Proxy de primera parte de Zenovay
location /api/_z/ {
# Proxy al endpoint de primera parte de Zenovay
proxy_pass https://api.zenovay.com/fp/;
# Establecer el encabezado Host correcto
proxy_set_header Host api.zenovay.com;
# Reenviar la IP del cliente real para geolocalización precisa
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Zenovay-Real-IP $remote_addr;
# Requerido para backend HTTPS
proxy_ssl_server_name on;
proxy_ssl_protocols TLSv1.2 TLSv1.3;
# Tiempos de espera
proxy_connect_timeout 10s;
proxy_send_timeout 10s;
proxy_read_timeout 30s;
# Almacenamiento en búfer
proxy_buffering on;
proxy_buffer_size 4k;
proxy_buffers 8 4k;
}
# Tus bloques de ubicación existentes...
location / {
try_files $uri $uri/ =404;
}
}Paso 2: Probar la Configuración
# Probar configuración de nginx
sudo nginx -t
# Si la prueba pasa, recargar nginx
sudo systemctl reload nginxPaso 3: Agregar el Script de Seguimiento
<script defer
data-tracking-code="YOUR_TRACKING_CODE"
src="/api/_z/script.js">
</script>
Configuración de Apache
Paso 1: Habilitar Módulos Requeridos
Primero, habilita los módulos Apache necesarios:
# Habilitar módulos de proxy
sudo a2enmod proxy
sudo a2enmod proxy_http
sudo a2enmod ssl
sudo a2enmod headers
# Reiniciar Apache
sudo systemctl restart apache2Paso 2: Agregar la Configuración del Proxy
Agrega lo siguiente a tu configuración de host virtual Apache:
<VirtualHost *:443>
ServerName tudominio.com
ServerAlias www.tudominio.com
# Tu configuración SSL existente...
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/tudominio.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/tudominio.com/privkey.pem
# Tu raíz de documento existente...
DocumentRoot /var/www/tudominio
# Habilitar SSL para conexiones de proxy
SSLProxyEngine on
SSLProxyVerify none
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off
# Proxy de primera parte de Zenovay
ProxyPass "/api/_z/" "https://api.zenovay.com/fp/"
ProxyPassReverse "/api/_z/" "https://api.zenovay.com/fp/"
<Location "/api/_z/">
# No preservar el encabezado Host original
ProxyPreserveHost Off
# Reenviar la IP del cliente real
RequestHeader set X-Zenovay-Real-IP "%{REMOTE_ADDR}s"
RequestHeader set X-Real-IP "%{REMOTE_ADDR}s"
RequestHeader set X-Forwarded-For "%{REMOTE_ADDR}s"
</Location>
# Tu configuración existente...
<Directory /var/www/tudominio>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
</VirtualHost>Alternativa: Usar .htaccess
Si no tienes acceso a la configuración principal de Apache, puedes usar .htaccess (requiere mod_rewrite y mod_proxy):
RewriteEngine On
# Proxy de primera parte de Zenovay
RewriteRule ^api/_z/(.*)$ https://api.zenovay.com/fp/$1 [P,L]
<IfModule mod_headers.c>
<Location "/api/_z">
RequestHeader set X-Zenovay-Real-IP "%{REMOTE_ADDR}s"
</Location>
</IfModule>Nota: Usar .htaccess para proxificación requiere AllowOverride All y mod_proxy habilitados por tu proveedor de hosting. Muchos hosts compartidos no lo permiten.
Paso 3: Probar y Reiniciar
# Probar configuración de Apache
sudo apachectl configtest
# Si la prueba pasa, reiniciar Apache
sudo systemctl restart apache2Paso 4: Agregar el Script de Seguimiento
<script defer
data-tracking-code="YOUR_TRACKING_CODE"
src="/api/_z/script.js">
</script>Verificar Que Está Funcionando
Probar con curl
# Probar el endpoint del proxy
curl -I https://tudominio.com/api/_z/script.js
# Resultado esperado:
# HTTP/2 200
# content-type: application/javascript
# ...Verificar la Pestaña de Red
- Abre tu sitio web en un navegador
- Abre DevTools (F12)
- Ve a la pestaña Network
- Recarga la página
- Busca
/api/_z/script.js
Deberías ver:
- Estado: 200
- Dominio: Tu dominio (no api.zenovay.com)
- Respuesta: Código JavaScript
Probar en Firefox
- Abre Firefox
- Configuración → Privacidad y Seguridad → Protección de Seguimiento Mejorada: Estricta
- Visita tu sitio
- Verifica que el script se cargue correctamente
Solución de Problemas
nginx: 502 Bad Gateway
Causa: nginx no puede conectarse a la API de Zenovay.
Solución:
- Verifica que
proxy_ssl_server_name on;esté configurado - Verifica que tu servidor pueda alcanzar api.zenovay.com:
curl https://api.zenovay.com/fp/script.js - Verifica los registros de errores de nginx:
sudo tail -f /var/log/nginx/error.log
nginx: 404 Not Found
Causa: El bloque de ubicación no está coincidiendo.
Solución:
- Asegúrate de que la barra diagonal final sea consistente:
location /api/_z/coincide con/api/_z/script.jsproxy_pass https://api.zenovay.com/fp/;(nota la barra diagonal final)
- Prueba con
nginx -ty recarga
Apache: 503 Service Unavailable
Causa: Módulos de proxy no habilitados o problema de SSL.
Solución:
- Habilita los módulos requeridos:
sudo a2enmod proxy proxy_http ssl - Agrega configuración SSL de proxy:
SSLProxyEngine on SSLProxyVerify none - Verifica los registros de errores de Apache:
sudo tail -f /var/log/apache2/error.log
La Geolocalización Muestra la Ubicación del Servidor
Causa: La IP del cliente real no se está reenviando correctamente.
Solución:
Asegúrate de estar configurando el encabezado X-Zenovay-Real-IP:
nginx:
proxy_set_header X-Zenovay-Real-IP $remote_addr;
Apache:
RequestHeader set X-Zenovay-Real-IP "%{REMOTE_ADDR}s"
Si Está Detrás de Cloudflare o un Balanceador de Carga
Si tu servidor está detrás de Cloudflare u otro proxy, usa la IP reenviada:
nginx (detrás de Cloudflare):
proxy_set_header X-Zenovay-Real-IP $http_cf_connecting_ip;
nginx (detrás de balanceador de carga):
proxy_set_header X-Zenovay-Real-IP $http_x_forwarded_for;
Optimización de Rendimiento
Caché de nginx
Agrega caché para el script de seguimiento (opcional):
location /api/_z/ {
proxy_pass https://api.zenovay.com/fp/;
# ... otras configuraciones de proxy ...
# Cachear el script por 1 hora
proxy_cache_valid 200 1h;
proxy_cache_use_stale error timeout updating;
add_header X-Cache-Status $upstream_cache_status;
}Caché de Apache
<Location "/api/_z/">
# Habilitar caché
CacheEnable disk
CacheDefaultExpire 3600
</Location>Ejemplo Completo de nginx
server {
listen 80;
server_name tudominio.com www.tudominio.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name tudominio.com www.tudominio.com;
ssl_certificate /etc/letsencrypt/live/tudominio.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/tudominio.com/privkey.pem;
root /var/www/tudominio;
index index.html;
# Proxy de primera parte de Zenovay
location /api/_z/ {
proxy_pass https://api.zenovay.com/fp/;
proxy_set_header Host api.zenovay.com;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Zenovay-Real-IP $remote_addr;
proxy_ssl_server_name on;
}
location / {
try_files $uri $uri/ /index.html;
}
}Lista de Verificación Final
Antes de terminar, verifica TODOS estos puntos:
- Configuración de nginx/Apache tiene la ubicación del proxy para
/api/_z/ - La prueba de configuración pasa (
nginx -toapachectl configtest) - El servidor se recargó después del cambio de configuración
- La etiqueta de script usa
/api/_z/script.js(no la URL directa de Zenovay) - El atributo
data-tracking-codecontiene tu código de seguimiento correcto - El encabezado
X-Zenovay-Real-IPse está configurando para geolocalización - Probado en Firefox con Protección de Seguimiento Mejorada configurada a Estricta
- Las visitas aparecen en el panel de Zenovay
Próximos Pasos
- Eventos Personalizados - Rastrear interacciones del usuario
- Identificación de Visitantes - Vincular análisis a usuarios
- Solución de Problemas - Más ayuda con problemas