Arvancloud Uç Bilişim: Hız ve Güvenliğin Benzersiz Deneyimi

Arvancloud'un Edge Computing teknolojisi sayesinde, sunucuya ihtiyaç duymadan, çevrimiçi servislerinize ait komut dosyalarını ve işlem kodlarını kullanıcıya en yakın noktada çalıştırabilir ve hız ile güvenlikte yeni bir deneyim sunabilirsiniz.

blur-sm Arvancloud Uç Bilişim: Hız ve Güvenliğin Benzersiz Deneyimi
Ücretsiz SSL Sertifikası
Ücretsiz SSL Sertifikası

Tüm edge işlemine dahil edilen alan adlarına otomatik olarak ücretsiz SSL sertifikası atanır.

Hızlı ve Kolay Kurulum
Hızlı ve Kolay Kurulum

Arvancloud'un kullanıcı paneli veya CLI (Komut Satırı Arayüzü) sayesinde işletmenizin çevrimiçi servisini 30 saniyeden kısa bir sürede kurabilir ve devreye alabilirsiniz.

Optimize Edilmiş Performans
Optimize Edilmiş Performans

Tüm işletme kodlarınız Arvancloud’un CDN pop sitelerinde yer alır ve kullanıcıya en yakın noktadan çalıştırılır.

Üst Düzey Güvenlik
Üst Düzey Güvenlik

Arvancloud'un gelişmiş CDN güvenlik özellikleri sayesinde servislerinizi güvenli ve güvenilir bir ortamda geliştirebilirsiniz.

Özellikler

Gelişmiş Özelliklerle Çevrimiçi Servisleri Geliştirmek

Sunucusuz Çalışma

Bulut sunucusuna veya sanal bir sunucuya ihtiyaç duymadan işletmenizin çevrimiçi hizmetlerini geliştirebilir ve içerikleri kullanıcıya en yakın noktada çalıştırabilirsiniz.

Yüksek Ölçeklenebilirlik

Sunucu yük dengelemeye gerek kalmadan sınırsız içerik dağıtım ağı kaynaklarını kullanabilir ve trafiği farklı pop sitelerine yönlendirebilirsiniz.

Tek Tıkla Kurulum

Arvancloud'un hazır kodları ve şablonları ile istediğiniz servisi tek bir tıkla geliştirebilir ve ihtiyaçlarınıza göre kişiselleştirebilirsiniz.

Ekonomik

Edge Computing ile yazılım kurulumunuzu ve uygulamanızı düşük maliyetle kullanıcılarınıza sunabilirsiniz.

Sorun Giderme

Console Log sayesinde web sitenizi veya uygulamanızı yayına almadan önce hızlı bir şekilde düzenleyebilir (Debug) ve nihai sürümleri yayınlamadan kontrol edebilirsiniz.

Hızlı Yanıt Süreleri

Arvancloud'un Edge Computing teknolojisi ile kullanıcı taleplerine en yakın noktadan yanıt vererek hizmet sunum hızınızı büyük ölçüde artırabilirsiniz.

40+ Pop Site

Dünyanın yoğun trafik noktalarında hizmet

99.99% Uptime

Her zaman erişilebilir hizmetler

Saatde 500 Milyon

Talebe yanıt
Hazır Şablonlar

Tek Tıkla Kolayca Kullanılabilir Uygulama Servisleri

Round Robin Load Balancer

Hotlink Koruması

Basic Auth

SSR HTMX

Round Robin Load Balancer

Gelen taleplerinizi birden fazla sunucu arasında döngüsel olarak dağıtır. Trafik yükünü eşit şekilde paylaştırarak sistem performansını artırır ve zorlu trafik koşullarını sorunsuz bir şekilde yönetmenizi sağlar.

Daha Fazlası arrow
Kopyalandı
                                            
'use strict';

// Upstream URLs
const UPSTREAM_URLS = [
    new URL("http://localhost:4000"),
    new URL("http://localhost:4001"),
    new URL("http://localhost:4002"),
    new URL("http://localhost:4003"),
];

let NEXT_UPSTREAM_INDEX = 0;
async function handleRequest(request) {
    let upstreamIdx = NEXT_UPSTREAM_INDEX;
    NEXT_UPSTREAM_INDEX = (NEXT_UPSTREAM_INDEX + 1) % UPSTREAM_URLS.length;
    let upstream = UPSTREAM_URLS[upstreamIdx];
    return await doRequest(request, upstream);
}
function doRequest(request, upstream) {
    let newUrl = new URL(request.url);
    newUrl.protocol = upstream.protocol;
    newUrl.host = upstream.host;
    let newReq = new Request(newUrl.toString(), request);
    return fetch(newReq);
}

addEventListener("fetch", (event) => {
    event.respondWith(handleRequest(event.request));
});
                                        
Hotlink Koruması

Web sitenizdeki dosyaların (resim, video vb.) diğer web sitelerinde izinsiz kullanılmasını önler. Bu, bant genişliği ve maliyetlerinizi azaltırken servis güvenliğini artırır ve içeriklerinizi korur.

Daha Fazlası arrow
Kopyalandı
                                            
'use strict';

// Your domains that is allowed to access hotlinks
const DOMAINS = ["time.ir", "fa.wikipedia.org"];
// Upstream url
const UPSTREAM_URL = "http://localhost:4000";
// File extensions that hotlink is against
const EXTENSIONS = ["jpg", "jpeg", "png", "ico", "gif"];

async function handleRequest(request) {
    const fileExt = extractUrlFileExtension(request.url);
    if (fileExt == null || !EXTENSIONS_SET.has(fileExt)) {
        return await doRequest(request);
    }
    else {
        return await checkReferrerAndDoRequest(request);
    }
}
async function doRequest(request) {
    let newUrl = new URL(request.url);
    newUrl.protocol = UPSTREAM_PROTOCOL;
    newUrl.host = UPSTREAM_HOST;
    let newReq = new Request(newUrl.toString(), request);
    return fetch(newReq);
}
async function checkReferrerAndDoRequest(request) {
    let response;
    const referrerHeader = request.headers.get("referer");
    if (referrerHeader != null) {
        let domain = extractDomainFromReferrer(referrerHeader);
        if (domain == null || DOMAINS_SET.has(domain)) {
            response = await doRequest(request);
        }
        else {
            response = UNAUTHORIZED_RESPONSE;
        }
    }
    else {
        response = await doRequest(request);
    }
    return response;
}
function extractDomainFromReferrer(referrer) {
    try {
        return new URL(referrer).hostname;
    }
    catch (e) {
        return null;
    }
}
function extractUrlFileExtension(url) {
    try {
        let pathname = new URL(url).pathname;
        let lastDotIdx = pathname.lastIndexOf(".");
        if (lastDotIdx == -1) {
            return null;
        }
        else {
            return pathname.substring(1 + lastDotIdx);
        }
    }
    catch (e) {
        return null;
    }
}
const DOMAINS_SET = (() => {
    const set = new Set();
    DOMAINS.forEach((i) => set.add(i));
    return set;
})();
const EXTENSIONS_SET = (() => {
    const set = new Set();
    EXTENSIONS.forEach((i) => set.add(i));
    return set;
})();
const UNAUTHORIZED_RESPONSE = new Response(null, {
    status: 401,
});
const UPSTREAM_PROTOCOL = new URL(UPSTREAM_URL).protocol;
const UPSTREAM_HOST = new URL(UPSTREAM_URL).host;

addEventListener("fetch", (event) => {
    event.respondWith(handleRequest(event.request));
});
                                        
Basic Auth

Web sitenizin korunan bölümlerine kullanıcı adı ve şifre ile erişim sağlayabilirsiniz. Bu hızlı ve kolay uygulanabilir script, güvenlik ihtiyaçlarınızı karşılar.

Daha Fazlası arrow
Kopyalandı
                                            
'use strict';

// Credentials for users
const UserPassList = [{ user: "admin", pass: "adminpass" }];
// Upstream url
const UPSTREAM_URL = "http://localhost:4000";

async function handleRequest(request) {
    const authHeader = request.headers.get("Authorization");
    let response;
    if (authHeader != null && authHeader.startsWith("Basic")) {
        let encodedCredential = authHeader.substring(6);
        if (CREDENTIALS.has(encodedCredential)) {
            let newUrl = new URL(request.url);
            newUrl.protocol = UPSTREAM_PROTOCOL;
            newUrl.host = UPSTREAM_HOST;
            let newReq = new Request(newUrl.toString(), request);
            newReq.headers.delete("Authorization");
            response = await fetch(newReq);
        }
        else {
            response = UNAUTHORIZED_INVALID_CREDENTIALS_RESPONSE;
        }
    }
    else {
        response = UNAUTHORIZED_NEEDS_LOGIN_RESPONSE;
    }
    return response;
}
const UNAUTHORIZED_NEEDS_LOGIN_RESPONSE = new Response(null, {
    //TODO: Add realm and/or charset if needed
    headers: new Headers({
        "WWW-Authenticate": "Basic",
    }),
    status: 401,
});
const UNAUTHORIZED_INVALID_CREDENTIALS_RESPONSE = new Response(null, {
    status: 401,
});
// Key: Base64 encoded username:password
// Value: username
const CREDENTIALS = (() => {
    const map = new Map();
    for (let i of UserPassList) {
        // TODO: this may not properly work with utf8
        const encoded = btoa(`${i.user}:${i.pass}`);
        map.set(encoded, i.user);
    }
    return map;
})();
const UPSTREAM_PROTOCOL = new URL(UPSTREAM_URL).protocol;
const UPSTREAM_HOST = new URL(UPSTREAM_URL).host;

addEventListener("fetch", (event) => {
    event.respondWith(handleRequest(event.request));
});
                                        
SSR HTMX

Web sayfalarını sunucu tarafında dinamik olarak render eder ve belirli bölümleri tam sayfa yükleme olmadan günceller. Bu yöntem, yükleme hızını ve kullanıcı deneyimini iyileştirir.

Daha Fazlası arrow
Kopyalandı
                                            
'use strict';

const TODO_LIST = ["test"];
function createDb() {
    return {
        add: async (title) => {
            TODO_LIST.push(title);
        },
        list: async () => TODO_LIST,
    };
}
const DefaultDB = createDb();

var Index = "<!DOCTYPE html>\n<html lang=\"en\">\n\n<head>\n  <title>Todo list</title>\n  <script src=\"https://unpkg.com/htmx.org@1.9.5\"></script>\n  <link rel=\"stylesheet\" href=\"/styles.css\">\n</head>\n\n<body>\n  <div>\n    <div>\n      <h1>To-Do List</h1>\n    </div>\n    <form hx-post=\"/add\" hx-target=\"#list\" hx-swap=\"beforeend\">\n      <div>\n        <input type=\"text\" placeholder=\"Task title\" name=\"title\" required />\n        <button type=\"submit\">Add</button>\n      </div>\n    </form>\n    <div id=\"list\" hx-get=\"/list\" hx-trigger=\"load\"></div>\n  </div>\n</body>\n\n</html>";

var Styles = "h1 {\n  color: red;\n}\n";

async function handleRequest(request) {
    // simple router:
    let content = "";
    const url = new URL(request.url);
    switch (url.pathname) {
        case "/":
            content = Index;
            break;
        case "/styles.css":
            return new Response(Styles, {
                headers: { "Content-Type": "text/css" },
            });
        case "/add":
            const data = await request.formData();
            const title = data.get("title").toString();
            await DefaultDB.add(title);
            content = `<li>${title}</li>`;
            break;
        case "/list":
            content = (await DefaultDB.list()).map((x) => `<li>${x}</li>`).join("");
            break;
        default:
            content = "Not found :(";
    }
    if (request.url)
        return new Response(content, {
            headers: { "Content-Type": "text/html; charset=utf-8" },
        });
}

addEventListener("fetch", (event) => {
    event.respondWith(handleRequest(event.request));
});
                                        
Fiyatlandırma

Çevrimiçi İşletmeler için Ekonomik Altyapı

Kullandıkça Öde

Ücretsiz Giriş Trafiği
100 Edge İşlem Uygulaması
Ayda 100.000 Ücretsiz Talep
Ücretsiz Başlat

Kurumsal

Ücretsiz Giriş Trafiği
500 Edge İşlem Uygulaması
Sınırsız Talep Sayısı
Kayıt iste
Son maliyet, Arvancloud'un Uç Bilişim hizmetini kullanımınıza göre hesaplanır. Daha fazla ayrıntı için fiyatlandırma sayfasını ziyaret edin.
Edge Computing Fiyatlandırması

Daha Hızlı ve Güvenli

Arvancloud Uç Bilişim ile çeşitli bulut altyapılarına ihtiyaç duymadan hizmetlerinizi geliştirin.