FS DNSFS Digital TVVerificando
AdminCriar Worker de Host
Faça de cima para baixo. Não pule etapas.
Este é o processo completo para criar um Host novo usando seu domínio fsdns.cc. Faça uma etapa por vez.
1
Escolha o nome
Digite abaixo o nome do Host. Você pode usar letras, números e hífen. Exemplos: central, goias, cliente1 ou fs10.
✓ O endereço final será https://central.fsdns.cc.
2
Crie o Worker
Cloudflare → Workers & Pages → Criar Worker. No nome, coloque somente central. A Cloudflare mostrará um endereço workers.dev nessa tela; pode ignorar, ele não será o endereço entregue ao cliente.
3
Cole e implante o código
Abra o Worker → Editar código. Apague o código de exemplo, cole o código abaixo e clique em Deploy/Implantar.
Código completo
const MAX_REDIRECTS = 6;
function required(env, key) {
const value = env[key];
if (!value) throw new Error(`Missing ${key}`);
return value;
}
async function getTarget(env) {
const apiBase = required(env, "FS_DNS_API_URL").replace(/\/$/, "");
const slug = required(env, "HOST_SLUG");
const response = await fetch(`${apiBase}/api/worker-state/${encodeURIComponent(slug)}`, {
headers: { Accept: "application/json" },
cf: { cacheTtl: 0, cacheEverything: false },
});
if (!response.ok) return null;
const payload = await response.json();
return payload?.ok && typeof payload.target === "string" && payload.target ? payload.target : null;
}
function upstreamUrl(requestUrl, target) {
const incoming = new URL(requestUrl);
const upstream = new URL(target);
upstream.pathname = incoming.pathname;
upstream.search = incoming.search;
return upstream;
}
function isMedia(path) {
return path.startsWith("/live/") || path.startsWith("/movie/") || path.startsWith("/series/");
}
async function resolveRedirects(url, headers) {
let current = url;
for (let i = 0; i < MAX_REDIRECTS; i++) {
const response = await fetch(current, { method: "HEAD", headers, redirect: "manual" });
if (response.status < 300 || response.status >= 400) return current;
const location = response.headers.get("location");
if (!location) return current;
current = new URL(location, current).toString();
}
return current;
}
async function handle(request, env) {
const incoming = new URL(request.url);
const target = await getTarget(env);
if (!target) return new Response("Host indisponível.", { status: 503 });
const upstream = upstreamUrl(request.url, target);
if (incoming.pathname === "/player_api.php") {
return fetch(new Request(upstream.toString(), request), { redirect: "manual" });
}
if (incoming.pathname === "/get.php" || incoming.pathname === "/xmltv.php") {
const destination = await resolveRedirects(upstream.toString(), request.headers);
return Response.redirect(destination, 302);
}
if (isMedia(incoming.pathname)) return Response.redirect(upstream.toString(), 302);
const destination = await resolveRedirects(upstream.toString(), request.headers);
return Response.redirect(destination, 302);
}
export default {
async fetch(request, env) {
try { return await handle(request, env); }
catch (error) {
console.error("FS DNS Worker error", error instanceof Error ? error.message : error);
return new Response("FS DNS indisponível.", { status: 503 });
}
},
};4
Adicione as 2 variáveis
Worker → Configurações → Variables and Secrets. Use os botões abaixo para copiar cada linha completa NOME=VALOR e cole na Cloudflare.
Nome + valor
HOST_SLUG=centralNome + valor
FS_DNS_API_URL=https://fsdns.cc5
Conecte seu domínio
Worker → Domínios → Adicionar domínio → escolha fsdns.cc. No campo Subdomínio, digite somente central. Confirme que o resultado é central.fsdns.cc e adicione o domínio.
6
Cadastre o Host no FS DNS
FS DNS → Hosts → Novo Host. Em Host Cloudflare, use exatamente central. Cadastre a URL Primária e, se houver, as Reservas.
7
Verifique o Host
Depois de criar o Host, clique em Verificar agora. Aguarde a origem ficar verde, o Host aparecer como Operacional e existir uma rota ativa.
8
Teste no player
No player IPTV, substitua o servidor original por https://central.fsdns.cc e mantenha as credenciais normais. Se carregar normalmente, o Host está pronto.
Laboratório de failover/failback
Teste a troca automática sem derrubar um servidor real
A Primary de Teste imita o servidor principal e pode ser desligada de propósito. A Reserve de Teste fica online para comprovar que o FS DNS troca de origem sozinho. Depois você liga a Primary novamente e confirma o retorno automático.
Ordem: crie a Primary → crie a Reserve → cadastre ambas em um Host de laboratório → Primary UP → mude para DOWN → aguarde o failover → volte para UP → aguarde o failback.